基本上,我认为我不能,但很高兴被证明是错误的。
我在PHP中动态生成一个HTML菜单,为每个当前用户添加一个项目,这样我得到<a href="process_user.php?user=<user>>
之类的内容,但我更喜欢POST而不是GET。
有没有办法将信息作为POST参数传递,而不是通过可点击的HREF链接传递?
更新:对不起,我不允许使用JS - 我应该说,我的不好
更新到更新:看起来@Rob正在使用“你可以使用按钮而不是锚点,只需将按钮设置为看起来像链接。这样你就可以在隐藏的字段中设置你的值通过POST发送相同的表格“
答案 0 :(得分:41)
您可以使用样式为链接的表单,不需要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;
}
答案 1 :(得分:12)
URL中的参数是GET参数,请求体(如果存在)是POST数据。因此,根据定义,您的基本前提是无法实现的。
您应该根据操作选择是使用POST还是GET。任何破坏性操作,即永久更改服务器状态(删除,添加,编辑)的操作应始终由POST请求调用。任何纯粹的“信息检索”都应该通过一个不变的URL(即GET请求)来访问。
要发出POST请求,您需要创建<form>
。您可以使用Javascript来创建POST请求,但我不建议使用Javascript来实现这么基本的东西。如果你想让你的提交按钮看起来像一个链接,我建议你使用普通的提交按钮创建一个普通的表单,然后使用CSS重新设置按钮和/或使用Javascript替换按钮以提交表单的链接使用Javascript(取决于更好地再现所需的行为)。这是渐进增强的一个很好的例子。
答案 2 :(得分:11)
点击后,您可以让链接执行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="soemthing" />
<a href="#">CLick</a>
</form>
<script>
$('a').click(function(e) {
e.preventDefault();
$(this).parents('form').submit();
});
</script>
答案 3 :(得分: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上的参数,这样更安全。
答案 4 :(得分:5)
不,你不能那样做。 我邀请您阅读POST定义:http://en.wikipedia.org/wiki/POST_%28HTTP%29
或此页:http://en.wikipedia.org/wiki/GET_%28HTTP%29#Request_methods
答案 5 :(得分:5)
首先,免责声明:我不认为将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 params存储在$ _GET变量中,并在$ _POST变量中形成数据。我怀疑它非常适合PHP和服务器,并且绝对不是一件可以依赖的东西。
答案 6 :(得分:2)
如果php脚本为每个带有隐藏字段的条目生成一个表单,并且href使用javascript发布表单,这可能会有效。