2012-10-23 77 views
0

这让我陷入了疯狂的边缘。 我有一个动态的形式, 基本上是通过jQuery 创建,然后通过邮寄提交:杀死POST请求!为什么?

//post_form 
document.body.appendChild(form); 
form.submit(); 

,但我打电话这个脚本是这样的:

post_form(url,params); 
window.location = "/myurl"; 

把window.location的后post_form()调用永远不会发送post请求,当调试时,我可以看到代码正在执行... 任何人都在乎给我一个原因发生了什么?谢谢!

+0

一个字:异步。 – rdlowrey

回答

3

代码正在执行,表单正被追加到文档主体,并且它的提交开始,但是在您重定向离开页面的那一刻,该页面会与您的表单一起处理,从而中止其正在进行的提交。您使用jQuery标记了您的问题,但您的示例代码中没有使用任何实际的jQuery - 您应该使用.serialize()表单并使用jQuery.post()jQuery.ajax()提交,并且仅在jQuery调用成功回调后重定向。

+0

你是对的,我只使用jquery动态构建表单,但在我提交的代码中没有实际的jQuery。感谢您的解释 – faboolous

2

就像您提交表单一样,然后很快点击不同的链接。浏览器只能执行一个“主要”请求。它可以发送POST请求并刷新视图,也可以发送GET请求并刷新视图,而不管它接收到响应。该脚本以非常快的速度执行,因此第一个POST请求被取消。这两项行动都是“走向另一页”行动,它们不能同时发生。

完成AJAX POST请求并通过Javascript重定向时,或者通过HTTP头重定向以响应POST请求。