在表单提交之前等待异步.ajaxComplete()

时间:2013-02-03 11:52:59

标签: javascript jquery ajax asynchronous submit

我需要覆盖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可以帮助或无限循环?

2 个答案:

答案 0 :(得分:0)

我认为您需要同步ajax调用,因此脚本将等待响应然后继续运行。

$。AJAX({

...

异步:假,

...

});

http://api.jquery.com/jQuery.ajax/

答案 1 :(得分:0)

另一种方法是将click事件添加到提交按钮,而不是将事件提交给表单, 发送ajax并使用event.prevenrDefault,在ajax成功回调时触发表单submit - $('#form')。submit()。