[英]How can I pass POST parameters in a URL?
基本上,我认为我做不到,但我会很高兴被证明是错误的。
我在 PHP 中动态生成 HTML 菜单,为每个当前用户添加一个项目,以便我得到类似<a href="process_user.php?user=<user>>
GET 的内容。
有没有办法将信息作为 POST 参数传递,而不是从可点击的 HREF 链接获取?
我不允许使用 JavaScript。
看起来Rob 正在使用“您可以使用按钮而不是锚点并将按钮设置为看起来像链接的样式。这样您就可以在同一表单内的隐藏字段中通过 POST 发送您的值”
您可以使用样式为链接的表单。 不需要 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;
}
URL 中的参数是 GET 参数,请求正文(如果存在)是 POST 数据。 因此,根据定义,您的基本前提是无法实现的。
您应该根据操作选择使用 POST 还是 GET。 任何破坏性操作,即永久更改服务器的 state 的操作(删除、添加、编辑)都应始终由 POST 请求调用。 任何纯粹的“信息检索”都应该可以通过不变的 URL(即 GET 请求)访问。
要发出 POST 请求,您需要创建一个<form>
。 您可以使用 Javascript 来创建 POST 请求,但我不建议将 Javascript 用于如此基本的事情。 如果您希望提交按钮看起来像一个链接,我建议您使用普通提交按钮创建一个普通表单,然后使用 CSS 重新设置按钮的样式和/或使用 Javascript 将按钮替换为提交表单的链接使用 Javascript (取决于更好地再现所需行为的内容)。 那将是渐进增强的一个很好的例子。
您可以使链接在单击时执行 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>
我也想分享我的实现。 不过,它确实需要一些 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 中的参数,这样更安全。
首先,免责声明:我不认为将 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'];
?>
Output
Array ( [key2] => value2 [key3] => value3 )
Array ( [key1] => value1 )
POST
可以清楚地看到,PHP 将 URL 参数存储在$_GET变量中,将表单数据存储在$_POST变量中。 不过,我怀疑它非常特定于 PHP 和服务器,并且绝对不是可以依赖的东西。
如果 PHP 脚本为每个带有隐藏字段的条目生成一个表单,并且 href 使用 JavaScript 发布表单,这可能会起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.