我需要覆盖form的submit方法,等待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可以帮助或无限循环?
答案 0 :(得分:0)
答案 1 :(得分:0)
另一种方法是将click事件添加到提交按钮,而不是将事件提交给表单, 发送ajax并使用event.prevenrDefault,在ajax成功回调时触发表单submit - $('#form')。submit()。