【问题标题】:Wait asynchronous .ajaxComplete() before form submitting在提交表单之前等待异步 .ajaxComplete()
【发布时间】: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


【解决方案1】:

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

$.ajax({

...

异步:假,

...

});

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

【讨论】:

  • 不,应该使用同步 ajax 调用,它们甚至已被弃用。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-10-18
    • 1970-01-01
    • 2017-09-05
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多