这让我陷入了疯狂的边缘。 我有一个动态的形式, 这基本上是通过jquery创建的 然后通过邮件提交:
//post_form
document.body.appendChild(form);
form.submit();
但是我这样称这个脚本:
post_form(url,params);
window.location = "/myurl";
在post_form()调用之后放置window.location永远不会发送post请求,在调试的时候,我可以看到代码正在执行... 有人想给我一个理由吗?谢谢!
答案 0 :(得分:3)
代码正在执行,表单将附加到文档正文,并且其提交开始,但是当您从页面重定向时,页面将与您的表单一起处理,从而中止其正在进行的提交。您已使用jQuery
标记了自己的问题,但未在示例代码中使用任何实际的jQuery - 您应.serialize()
使用jQuery.post()
或jQuery.ajax()
提交表单并提交只有在jQuery调用成功回调后重定向。
答案 1 :(得分:2)
就像您提交表单一样,然后快速点击其他链接。浏览器只能执行一个“主”请求。它发送一个POST请求并使用它在响应中收到的任何内容刷新视图,或者它发送一个GET请求并刷新视图以及响应时收到的任何内容。该脚本非常快速地执行,因此第一个POST请求被取消。这两个动作都是“转到另一个页面”动作,它们不能同时发生。
执行AJAX POST请求并在完成后通过Javascript重定向,或者通过HTTP标头重定向以响应POST请求。