繁体   English   中英

如何在 URL 中传递 POST 参数?

[英]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;
}

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

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 和服务器,并且绝对不是可以依赖的东西。

不,你不能那样做。 我邀请您阅读POST 定义

或本页:HTTP,请求方法

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM