【问题标题】:wait till functions with ajax calls finish execution in jquery等到带有ajax调用的函数在jquery中完成执行
【发布时间】:2015-06-18 21:57:42
【问题描述】:

我有 3 个函数,在每个函数中我都有一个本质上是同步的 AJAX 调用。

function()
{
  a();
  b();
  c();
}
a()
{
   ajaxGet(globals.servicePath + '/Demo.svc/GetDemoList/' + sessionStorage.SessionId,function(data, success) {}, '', {async: false}, false);
}

同样适用于 b() 和 c()。

现在我想等待这些调用的执行,然后继续进行其他操作,因为这些操作是基于我在这里得到的结果。我怎样才能做到这一点?

【问题讨论】:

  • 您是否可以控制a()b()c() 中的代码?如果是这样,请从$.ajax 返回承诺并在您的匿名函数中使用$.when
  • 查看 jquery .promise.done
  • 永远不要使用async: false。学习按照浏览器的预期方式工作(异步):)
  • 如果它们是同步的,那么你根本不需要做任何特别的事情来等待它们。

标签: javascript jquery ajax


【解决方案1】:
  • 答:永远不要使用async: false。那样会导致黑暗面!
  • B:见 A :)

一种解决方案是使用从 Ajax 调用返回的 jQuery 承诺。

如果您想知道所有 3 项何时完成(以任何顺序异步),请使用 $.when()

function()
{
  $.when(a(), b(), c()).done(function(){
       // Now do something else
  });
}

并让每个方法返回 Ajax 调用的 jQuery 承诺:

function a()
{
   return $.ajax(globals.servicePath + '/Demo.svc/GetDemoList/' + sessionStorage.SessionId,function(data, success) {}, ''...);
}

我使用计时器模拟了一些虚假的“ajax 调用”来展示这一点:

JSFiddle: http://jsfiddle.net/TrueBlueAussie/rqq41Lg3/

如果出于某种原因,您希望它们按顺序运行,然后触发您的额外代码,您可以使用 then 链接它们

a().then(b).then(c).done(function(){
    console.log("All done");
});

JSFiddle: http://jsfiddle.net/TrueBlueAussie/rqq41Lg3/1/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-31
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多