我不确定这是否可行。但我想知道是否有人知道如何使一个超链接传递一些变量和使用POST(像一个表单)而不是GET。


当前回答

这是一个老问题,但没有一个答案能完全满足要求。所以我又增加了一个答案。

据我所知,请求的代码应该只对普通超链接的工作方式做一个更改:应该使用POST方法而不是GET。其直接影响将是:

当链接被点击时,我们应该重新加载标签到href的url 因为方法是POST,所以我们加载的目标页面的URL中不应该有查询字符串 该页应该通过POST接收参数(名称和值)中的数据

我在这里使用jquery,但这可以用本地api完成(当然更难和更长的时间)。

<html>
<head>
    <script src="path/to/jquery.min.js" type="text/javascript"></script>
    <script>
        $(document).ready(function() {

            $("a.post").click(function(e) {
                e.stopPropagation();
                e.preventDefault();
                var href = this.href;
                var parts = href.split('?');
                var url = parts[0];
                var params = parts[1].split('&');
                var pp, inputs = '';
                for(var i = 0, n = params.length; i < n; i++) {
                    pp = params[i].split('=');
                    inputs += '<input type="hidden" name="' + pp[0] + '" value="' + pp[1] + '" />';
                }
                $("body").append('<form action="'+url+'" method="post" id="poster">'+inputs+'</form>');
                $("#poster").submit();
            });
        });
    </script>
</head>
<body>
    <a class="post" href="reflector.php?color=blue&weight=340&model=x-12&price=14.800">Post it!</a><br/>
    <a href="reflector.php?color=blue&weight=340&model=x-12&price=14.800">Normal link</a>
</body>
</html>

为了查看结果,将以下文件保存为reflector.php,并将其保存在与上面文件相同的目录中。

<h2>Get</h2>
<pre>
<?php print_r($_GET); ?>
</pre>

<h2>Post</h2>
<pre>
<?php print_r($_POST); ?>
</pre>

其他回答

你可以使用javascript函数。JQuery有一个很好的内置post函数,如果你决定使用它:

JQuery的帖子

<script language="javascript"> 

   function DoPost(){
      $.post("WhateverPage.php", { name: "John", time: "2pm" } );  //Your values here..
   }

</script>

<a href="javascript:DoPost()">Click Here</A> 

检查这个,它会帮助你

$().redirect('test.php', {'a': 'value1', 'b': 'value2'});

除了使用javascript,还可以使用标签发送隐藏表单。非常简单和小的解决方案。标签可以在html中的任何地方。

<form style="display: none" action="postUrl" method="post"> <button type="submit" id="button_to_link"> </button> . > < /形式 <label style="text-decoration: underline" for="button_to_link">张贴的链接</label>

这是一个老问题,但没有一个答案能完全满足要求。所以我又增加了一个答案。

据我所知,请求的代码应该只对普通超链接的工作方式做一个更改:应该使用POST方法而不是GET。其直接影响将是:

当链接被点击时,我们应该重新加载标签到href的url 因为方法是POST,所以我们加载的目标页面的URL中不应该有查询字符串 该页应该通过POST接收参数(名称和值)中的数据

我在这里使用jquery,但这可以用本地api完成(当然更难和更长的时间)。

<html>
<head>
    <script src="path/to/jquery.min.js" type="text/javascript"></script>
    <script>
        $(document).ready(function() {

            $("a.post").click(function(e) {
                e.stopPropagation();
                e.preventDefault();
                var href = this.href;
                var parts = href.split('?');
                var url = parts[0];
                var params = parts[1].split('&');
                var pp, inputs = '';
                for(var i = 0, n = params.length; i < n; i++) {
                    pp = params[i].split('=');
                    inputs += '<input type="hidden" name="' + pp[0] + '" value="' + pp[1] + '" />';
                }
                $("body").append('<form action="'+url+'" method="post" id="poster">'+inputs+'</form>');
                $("#poster").submit();
            });
        });
    </script>
</head>
<body>
    <a class="post" href="reflector.php?color=blue&weight=340&model=x-12&price=14.800">Post it!</a><br/>
    <a href="reflector.php?color=blue&weight=340&model=x-12&price=14.800">Normal link</a>
</body>
</html>

为了查看结果,将以下文件保存为reflector.php,并将其保存在与上面文件相同的目录中。

<h2>Get</h2>
<pre>
<?php print_r($_GET); ?>
</pre>

<h2>Post</h2>
<pre>
<?php print_r($_POST); ?>
</pre>

正如许多帖子所提到的,这是不可能直接实现的,但一个简单而成功的方法如下: 首先,我们在html页面的主体中放入一个表单,它没有任何提交按钮,而且它的输入是隐藏的。 然后我们使用javascript函数来获取数据并发送表单。这种方法的优点之一是重定向到其他页面,这取决于服务器端代码。 代码如下: 现在在任何你需要一个to be in "POST"方法的地方:

<script type="text/javascript" language="javascript">
function post_link(data){

    $('#post_form').find('#form_input').val(data);
    $('#post_form').submit();
};
</script>

   <form id="post_form" action="anywhere/you/want/" method="POST">
 {% csrf_token %}
    <input id="form_input" type="hidden" value="" name="form_input">
</form>

<a href="javascript:{}" onclick="javascript:post_link('data');">post link is ready</a>