【问题标题】:How can I pass POST parameters in a URL?如何在 URL 中传递 POST 参数?
【发布时间】:2011-06-02 05:45:28
【问题描述】:

基本上,我认为我做不到,但我很高兴被证明是错误的。

我在 PHP 中动态生成一个 HTML 菜单,为每个当前用户添加一个项目,以便我得到类似 <a href="process_user.php?user=<user>> 的内容,但我更喜欢 POST 而不是 GET。

有没有办法将信息作为 POST 参数而不是从可点击的 HREF 链接获取?

我不允许使用 JavaScript。


它看起来像 Rob is on to something 与“您可以使用按钮而不是锚点,只需将按钮设置为看起来像一个链接。这样您就可以在同一表单内的隐藏字段中通过 POST 发送您的值"

【问题讨论】:

  • 您使用表单或javascript ajax。抱歉,无法在url中传递帖子
  • 只有一种解决方案:jQuery.Ajax()
  • “process_user”是做什么的?它是更新/创建信息还是只是搜索?
  • 您可以使用按钮而不是锚点,只需将按钮设置为看起来像一个链接。这样你就可以在同一个表单内的隐藏字段中通过 POST 发送你的值。
  • 除了Ben所说的之外,您还可以让链接成为虚拟链接并让它执行提交隐藏表单的javascript。由于表单在嵌套方式上可能有点挑剔,这可能会使其更容易。

标签: php http http-post http-get


【解决方案1】:

您可以使用样式为链接的表单。不需要 JavaScript:

<form action="/do/stuff.php" method="post">
    <input type="hidden" name="user_id" value="123" />
    <button>Go to user 123</button>
</form>

CSS:

button {
    border: 0;
    padding: 0;
    display: inline;
    background: none;
    text-decoration: underline;
    color: blue;
}
button:hover {
    cursor: pointer;
}

见:http://jsfiddle.net/SkQRN/

【讨论】:

  • 这行得通。只是为了添加,如果他希望链接与他的其他链接保持一致,他可以在他的样式表中将其添加为 a:link, button.class {}a:hover, button.class:hover {} 等。
  • ...如果您愿意,您仍然可以将method='post' 设置为表单。太好了!
【解决方案2】:

URL 中的参数是 GET 参数,请求正文(如果存在)是 POST 数据。因此,根据定义,您的基本前提是无法实现的。

您应该根据操作选择使用 POST 还是 GET。任何 破坏性 操作,即永久更改服务器状态的操作(删除、添加、编辑)都应始终由 POST 请求调用。任何纯粹的“信息检索”都应该可以通过不变的 URL(即 GET 请求)访问。

要发出 POST 请求,您需要创建一个 &lt;form&gt;。您可以使用 Javascript 来创建 POST 请求,但我不建议将 Javascript 用于如此基本的事情。如果您希望提交按钮看起来像一个链接,我建议您使用普通提交按钮创建一个普通表单,然后使用 CSS 重新设置按钮的样式和/或使用 Javascript 将按钮替换为提交表单的链接使用 Javascript(取决于更好地再现所需行为的内容)。这将是渐进式增强的一个很好的例子。

【讨论】:

    【解决方案3】:

    您可以使链接在单击时执行 Ajax 发布请求。

    在 jQuery 中:

    $('a').click(function(e) {
        var $this = $(this);
        e.preventDefault();
        $.post('url', {'user': 'something', 'foo': 'bar'}, function() {
            window.location = $this.attr('href');
        });
    });
    

    您还可以使用 JavaScript 使链接提交一个 POST 表单:

    <form action="url" method="post">
        <input type="hidden" name="user" value="something" />
        <a href="#">CLick</a>
    </form>
    
    <script>
        $('a').click(function(e) {
            e.preventDefault();
            $(this).parents('form').submit();
        });
    </script>
    

    【讨论】:

      【解决方案4】:

      我也想分享我的实现。不过它确实需要一些 JavaScript 代码。

      <form action="./index.php" id="homePage" method="post" style="display: none;">
          <input type="hidden" name="action" value="homePage" />
      </form>
      
      <a href="javascript:;" onclick="javascript:
      document.getElementById('homePage').submit()">Home</a>
      

      这样做的好处是,与 GET 请求相反,它不显示 URL 中的参数,这样更安全。

      【讨论】:

      • 非常感谢!!!!!! +1 就像一个魅力。添加target="_blank" 会更好。
      【解决方案5】:

      不,你不能那样做。我邀请您阅读a POST definition

      或者这个页面:HTTP, request methods

      【讨论】:

      • 虽然您链接到一些内容丰富的文章,但实际上可以使用一些 JavaScript 或 CSS,如其他答案所示。
      • 您的问题是“如何在 URL 中传递 POST 参数?”答案是你不能。前面的代码是通过javascript事件通过表单发送POST变量...
      • 那是问题的标题。如果您阅读实际问题,他正在寻找不同的东西。
      • “有没有办法将信息作为 POST 参数传递,而不是从可点击的 HREF 链接获取?”作为一个可点击的链接......我们可以玩文字我同意你可以绕过它,但它不再是一个链接,它是一个动作。
      • 好的,好吧,已经......任何可点击的东西(用户可能认为是一个链接,这将是一个奖励)看起来@rob 有一个关于提交按钮的想法
      【解决方案6】:

      首先,免责声明:我不认为将 POST 与 URL 参数结合是一个绝妙的主意。像其他人建议的那样,您最好使用隐藏表单来传递用户信息。

      但是,一个问题让我很好奇 PHP 是如何处理这种情况的。事实证明,理论上是可行的。这是一个证明:

      post_url_params.html

      <!DOCTYPE html>
      <html>
          <head></head>
          <body>
              <form method="post" action="post_url_params.php?key1=value1">
                  <input type="hidden" name="key2" value="value2">
                  <input type="hidden" name="key3" value="value3">
                  <input type="submit" value="click me">
              </form>
          </body>
      </html>
      

      post_url_params.php

      <?php
          print_r($_POST);
          print_r($_GET);
          echo $_SERVER['REQUEST_METHOD'];
      ?>
      

      输出

      Array ( [key2] => value2 [key3] => value3 )
      Array ( [key1] => value1 )
      POST
      

      可以清楚地看到,PHP 将 URL 参数存储在 $_GET 变量中,将表单数据存储在 $_POST 变量中。不过,我怀疑它是特定于 PHP 和服务器的,而且绝对不值得依赖。

      【讨论】:

        【解决方案7】:

        如果 PHP 脚本为每个带有隐藏字段的条目生成一个表单,并且 href 使用 JavaScript 发布表单,这可能会起作用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-07-05
          • 2015-12-18
          • 2011-10-26
          • 1970-01-01
          • 2010-09-20
          • 1970-01-01
          • 2015-04-03
          • 2016-12-21
          相关资源
          最近更新 更多