Javascript 通过链接导航到具有post请求的其他页面 函数DoPost(){ $.post(“index.html”,{name:“John”,time:“2pm”}); }

Javascript 通过链接导航到具有post请求的其他页面 函数DoPost(){ $.post(“index.html”,{name:“John”,time:“2pm”}); },javascript,jquery,html,post,hyperlink,Javascript,Jquery,Html,Post,Hyperlink,我创建了一个函数并试图调用该函数,在该函数中我提到了前面提到的url和数据。但是,这对我不起作用 注意:即使我在我的文章标题中提到过,我也想澄清一下,我想通过简单的超链接使用post方法导航到另一个页面。你说它不起作用是什么意思?当您将结果发布到一个简单的.html页面时,它是如何工作的 $.post函数是$.ajax的简写,我总是发现它更容易阅读和调试!请再次查看您提供的链接,并查看页面底部的示例 例如: <html> <head> <script src="ht

我创建了一个函数并试图调用该函数,在该函数中我提到了前面提到的url和数据。但是,这对我不起作用


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

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

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

例如:

<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>
更新:不,它不应该转到
index.html
。您的代码实际做的是将post变量发送到
.html
页面,因此基本上没有做那么多。也就是说,您可以使用许多不同的解决方案来做您想做的事情,请参见下面的两个解决方案:

  • 您可以在
    $功能上添加
    done
    事件。post
    功能,例如:

    <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>
    
    $.post(“test.php”{name:“John”,time:“2pm”}).done(函数(){alert(“Success,在这里重定向!”);})

  • 或者可能使用get变量而不是post变量重定向?例如:

    <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>
    
    window.location=“index.php?username=blah&pass=blah”
    并在php页面中处理它们


注:上述解决方案显然是为了测试目的,如果你这样做,你将不得不以某种方式加密你的数据

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

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


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

最后,我做到了,但并不是完全按照我的要求。但这对我很有帮助。现在,为他人分享

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

函数DoPost(){
document.postlink.submit();
}   

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

第1部分:解决方案 使用
POST
请求导航的传统解决方案是一个表单,可接受的答案使用该表单。我将在此基础上提出一个使用DOM以编程方式创建表单的解决方案

<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>
我按照您的原始代码使用了
index.html
,但我会接受接受答案的建议,并使用PHP接受和处理
POST
数据

第二部分:问题 原始解决方案的主要问题是它使用了
$.post
,这是一个构建在
$.ajax
之上的辅助函数。AJAX用于从服务器检索数据并在当前页面中使用,而不是导航到另一个页面。

函数js\u navigate\u with_post(js\u url,js\u post\u参数)
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
{ var js_html=''; js_html+=“\n”; js_html+=“\n”; for(js_post_参数中的var js_键){ if(js_post_参数hasOwnProperty(js_键)) { js_html+=“\n”; } } js_html+=“\n”; jQuery('body').append(js_html); jQuery(“#js_导航_与_post”).submit(); }
这应该可以正常工作。 与一个答案相似,但更好

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();
}

我终于在我的一个项目中成功了

你可以试试

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();

去
$(“#单击我”)。单击(函数(e){
var myForm='1〕\
\
\
';
$('body').append(myForm);
$('#ff')。提交();
$('#ff')。删除();
});

不工作意味着。。当我单击
GO
时,它应该移动到
index.html
页面,如
url
value中所述。但是,什么也没发生,据我说它不起作用。所以使用@Vahe Yepremyan'ssolution@matty我请求你,请阅读我的帖子。因为,我需要后请求,如果这是不可能的,那么请让我知道。因为Vahe解决方案是简单的javascript,可以移动到另一个页面。@jWeavers您编写的解决方案应该移动到index.html页面。这就是解决方案。如果你还期待其他东西,请在你的问题中描述它,因为你不准确。可能是我在解释我的问题时错了,但是如果你看到了,我在post request中提到了我的文章标题
。您可能错过了。您知道,
$.post
发出了一个
AJAX
请求吗?如果您想使用
POST
请求导航,您可以使用表单。好的。。。但我想在简单的链接,所以有任何方法来执行这一点?嗯,形式比这个解决方案简单。使用
$.post
可以获取响应并将其写入文档,但这与加载新页面并不完全相同。所以,不,用链接或JavaScript是不可能的。哈哈哈。。。。别担心,我会。。我不是那个意思,我只是说,你迟到了一点,因为,我已经做到了。不是因为我比你更早发布它……)请记住,只有当DOM准备就绪时,doRedirect才会工作。。。你没什么大不了的,因为你在一个链接中显示它。我建议将表单放在显示doRedirect函数的链接之前。再见!太棒了,我没想到!看起来它可能会起作用,但您应该详细介绍一下您的解决方案然而,整个要点是离开页面导航,所以这真的不重要:-P。很好的解决方案,我将在我的项目中使用它。它如何更好?替换..的
。。在
中使用
$。每个
都比较慢,如果您使用的是jQuery,则应该使用r
<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>