【发布时间】:2013-02-03 11:52:58
【问题描述】:
我需要重写表单的提交方法以等待 ajax 请求完成。同时,ajax 请求应该是异步的,以显示进度指示器,并且默认的表单处理程序必须在收到响应后继续。
我不能使用 event.preventDefault() 然后手动调用 form.submit() ,因为表单发送结果应该在浏览器的新选项卡中打开。如果 form.submit() 将从代码中调用,那么某些浏览器(即 chrome)将阻止新的选项卡/窗口。
为了清楚起见,伪代码:
$('#form').submit(function(e) {
var result;
startIndicator();
asyncAjaxCheckResults(); // ajax complete handler changed 'result' var
stopIndicator(); // stopping indicator after async ajax will be completed
// continue with default submit behavior if we received desired result
// else prevent executing
if (result !== 'desired result') {
e.preventDefault();
}
});
在这种情况下可以做些什么吗?也许 $.deferred 可以帮助或无限循环?
【问题讨论】:
-
无限循环除了冻结浏览器并触发“长时间运行的脚本”错误之外无济于事。
-
我会看看 Jquery.When() api.jquery.com/jQuery.when
标签: javascript jquery ajax asynchronous submit