23
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>    
<script type="text/javascript">
    function DoPost(){
      $.post("index.html", { name: "John", time: "2pm" } );
   }
    </script>
</head>

<body>
<a href="javascript:DoPost()">GO</a>

</body>
</html>

我创建了函数并尝试调用该函数,在该函数中我提到了此处提到的 url 和数据。但是,它对我不起作用。

注意:即使我在帖子标题中提到,我也想澄清一下,我想POST通过简单的超链接使用方法导航到另一个页面。

4

7 回答 7

20

创建一个包含您需要发送的所有数据的 html 表单,并将您需要转发用户的页面指定为操作。

<form method="post" id="theForm" action="REDIRECT_PAGE.php">

然后在该表单中放置一些隐藏字段。

<input type="hidden" name="name" value="John">
<input type="hidden" name="time" value="2pm">
</form>

将其包装在您的 doRedirect 函数中,重定向将在正确提交您的 POST 数据时起作用。

document.getElementById('theForm').submit()

作为旁注,如果您需要读取 POST 数据,您可能希望将用户重定向到 .php 页面而不是 .html 页面。这取决于您的服务器配置,但默认情况下,我认为您不能在 .html 文件中运行 PHP 代码。

于 2013-06-29T10:11:24.907 回答
17

我知道这个问题已经快 4 年了,并且已经有一个公认的答案,但我想提供一个替代解决方案并指出你的错误。

第 1 部分:解决方案

使用请求导航的传统解决方案POST是接受的答案使用的表单。在此基础上,我将介绍一个使用 DOM 以编程方式创建表单的解决方案。

var payload = {
  name: 'John',
  time: '2pm'
};
var form = document.createElement('form');
form.style.visibility = 'hidden'; // no user interaction is necessary
form.method = 'POST'; // forms by default use GET query strings
form.action = 'index.html';
for (key in Object.keys(payload)) {
  var input = document.createElement('input');
  input.name = key;
  input.value = payload[key];
  form.appendChild(input); // add key/value pair to form
}
document.body.appendChild(form); // forms cannot be submitted outside of body
form.submit(); // send the payload and navigate

index.html按照您的原始代码使用,但我会接受已接受答案的建议并使用 PHP 来接受和处理POST数据。

第 2 部分:问题

您原始解决方案的主要问题是它使用$.post了一个建立在$.ajax. AJAX 用于从服务器检索数据并在当前页面中使用它,而不是导航到另一个页面。

于 2017-03-25T21:00:56.220 回答
7

这应该可以正常工作。类似于一个答案,但一个更好的答案。

var payload = {
  name: 'John',
  time: '2pm'
};
var form = document.createElement('form');
form.style.visibility = 'hidden';
form.method = 'POST';
form.action = link;
$.each(Object.keys(payload), function(index, key) {
var input = document.createElement('input');
    input.name = key;
    input.value = payload[key];
    form.appendChild(input)
});
document.body.appendChild(form);
form.submit();
于 2018-07-06T16:59:14.467 回答
1
function js_navigate_with_post(js_url, js_post_params)
{
    var js_html='';
    js_html += "<form id='js_navigate_with_post' method='post' action='"+js_url+"'>\n";
    js_html +=  "<input type='hidden' name='js_navigate_with_post' value='true'>\n";
    for (var js_key in js_post_params) {
        if (js_post_params.hasOwnProperty(js_key))
        {
            js_html +=  "<input type='hidden' name='"+js_key+"' value='"+js_post_params[js_key]+"'>\n";
        }
    }
    js_html += "</form>\n";
    jQuery('body').append(js_html);
    jQuery('#js_navigate_with_post').submit();
}
于 2017-04-10T19:37:18.450 回答
0

最后,我做到了,但并不完全如我所愿。但这对我很有帮助。现在,分享给其他人

<html>
  <head>
    <script type="text/javascript">
      function DoPost() {
        document.postlink.submit();
      }   
    </script>
  </head>

  <body>
    <a href="javascript:DoPost()">GO</a>
    <form action="demo.php" name="postlink" method="post">
      <input type="hidden" name="name" value="this is my POST data">
    </form>
  </body>
</html>
于 2013-06-29T10:14:08.290 回答
0

我终于在我的一个项目中让它工作了。

你可以试试

<html>
<head>
</head>

<body>
<button id="clickme">GO</button>

</body>
<script>
$("#clickme").click(function(e){
    var myForm = '<form id="ff" action="page2.php" method="POST">\
        <input name="name" value="John">\
        <input name="time" value="2pm">\
    </form>';
    $('body').append(myForm);
    $('#ff').submit();
    $('#ff').remove();
});
</script>
</html>
<html>
于 2020-07-25T17:43:07.840 回答
-1

你是什​​么意思它不起作用?.html当您将结果发布到一个简单的页面时,它是如何工作的?

$.post函数是 的简写$.ajax,我总是发现它更易于阅读和调试!请再次查看您提供的链接,并查看页面底部的示例!

例如:

$.post("test.php", { name: "John", time: "2pm" } );

更新:不,它不应该去index.html. 您的代码实际上所做的是将发布变量发送到.html页面,所以基本上它不会做那么多。也就是说,您可以使用许多不同的解决方案来做您想做的事情,请参见下面的两个:

  • 您可以done在函数上添加事件$.post,例如:

    $.post("test.php", { name: "John", time: "2pm" } ).done(function() { alert("Success, do the redirection here!"); });

  • 或者也许可能使用获取变量而不是发布变量进行重定向?例如:

    window.location = "index.php?username=blah&pass=blah"; 并在 php 页面中处理它们。

附言。上述解决方案显然是出于测试目的,如果你这样做,你将不得不以某种方式加密你的数据!

于 2013-06-29T09:23:29.143 回答