在其上有多个表单的Web应用程序上,如果您单击移动到另一个页面的选项,我们会通过调用$.post(window.location.pathname, options, saveReturn, 'json');
保存所有未保存的内容,然后通过设置一些参数并调用{来转到新页面{1}}。这通常可以正常工作,但是在我们客户的生产服务器上(当然不是他们的测试服务器),form.submit();
的操作似乎没有发生 - 应该保存到数据库中的东西不是'得救了。我有一个客户技术支持人员来运行一个firebug会话,由$.post
命令触发的POST显示为红色,并且没有“Response”标题。
我们在POST完成之前离开页面会导致某种竞争条件吗?有没有办法等待POST完成,而不是让$.post
函数负责saveReturn
?我不想将此功能添加到form.submit()
,因为如果他们使用“保存”按钮手动保存其工作,则会完成相同的saveReturn
调用。
答案 0 :(得分:1)
那是因为你在离开页面时正在终止连接。您应该在$.post
的回调中提交表单。
$.post(window.location.pathname, options, function(data){
saveReturn(data);
form.submit();
}, 'json');
答案 1 :(得分:1)
你的直觉似乎是正确的。如果您想将saveReturn
与form.submit
“更多”分开,则可以将form.submit
附加到请求的complete
事件中:
$.post(window.location.pathname, options).
success(saveReturn).
complete(function(){
form.submit();
});
这很好,因为它清楚地区分了这两个动作(当然假设你想要;这似乎是你想要的问题)。