2011-06-02 191 views
31

基本上,我认为我不能,但会很高兴被证明是错误的。如何在URL中传递POST参数?

我在PHP中动态生成一个HTML菜单,为每个当前用户添加一个项目,以便得到类似于<a href="process_user.php?user=<user>>的东西,但我有一个POST over GET的偏好。

有什么办法可以将信息作为POST参数传递,而不是通过可点击的HREF链接传递信息?


更新:对不起,我不能使用JS - 我早该说,是我不好


更新到更新:它看起来像@Rob是与“你可以给somethign使用按钮而不是锚点,只需将按钮样式设置为链接就可以了。这样,您可以通过POST发送同一表单中隐藏字段的值“

+2

您使用的是表单或javascript ajax。,对不起没有办法在url中传递帖子 – Ibu 2011-06-02 05:46:58

+1

只有一个解决方案:[jQuery.Ajax()](http://api.jquery.com/jQuery.ajax/) – diEcho 2011-06-02 05:49:44

+1

什么“process_user”呢?它更新/创建信息或只是搜索? – 2011-06-02 05:51:29

回答

35

你可以使用样式为纽带形式,没有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/

+2

这个工程。只要添加他想要的链接与他的其他链接一致,他可以将它作为'a:link,button.class {}'和'a:hover,button.class:hover {}'添加到他的样式表中。等 – Rob 2011-06-02 05:57:09

+3

......如果你愿意的话,你仍然可以将'method ='post''设置为表格。大! – Alphaaa 2015-05-23 05:17:57

5

不,您不能这样做。 我请你阅读POST定义:http://en.wikipedia.org/wiki/POST_%28HTTP%29

或本页面:http://en.wikipedia.org/wiki/GET_%28HTTP%29#Request_methods

+1

虽然你链接到一些信息性文章,它实际上是可以用其他答案中显示的一些JavaScript或CSS。 – Rob 2011-06-02 06:00:10

+1

你的问题是“如何在URL中传递POST参数?”答案是你的不行。前面的代码是通过javascript事件通过表单发送POST变量... – zzarbi 2011-06-02 06:03:53

+3

这是问题的标题。如果你读到实际的问题,他正在寻找不同的东西。 – Rob 2011-06-02 06:05:07

11

您可以使链接单击时执行AJAX POST请求。

在jQuery中:

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

你也可以将链接提交POST形式与JavaScript

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

参数中的URL的GET参数,请求主体,如果存在的话,是POST数据。所以你的基本前提根据定义是不可行的。

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

要发出POST请求,您需要创建<form>。你可能使用Javascript来创建一个POST请求,但我不会推荐使用Javascript的基本东西。如果你想让你的提交按钮看起来像一个链接,我建议你用普通的提交按钮创建一个正常的表单,然后使用CSS来重新设置按钮和/或使用Javascript来替换按钮提交表单的链接使用Javascript(取决于更好地再现所需行为)。这将是渐进增强的一个很好的例子。

2

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

7

我想和大家分享我的执行情况以及。它确实需要一些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上的参数,这是更安全。

+0

完美谢谢!!!!!! +1像一个魅力。添加'target =“_ blank”'更好。 – 2015-04-10 05:25:22

3

首先,免责声明:我不认为用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和服务器,绝对不是依靠它。