等到带有ajax调用的函数在jquery中完成执行

时间:2015-04-13 14:29:05

标签: javascript jquery ajax

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

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

类似于b()和c()。

现在我想等待执行这些调用,然后继续执行其他操作,因为这些操作基于我到达的结果。我怎么能这样做?

1 个答案:

答案 0 :(得分:15)

  • 答:永远不要使用async: false。那样就会导致黑暗的一面!
  • B:见A :))

一个解决方案是使用从Ajax调用返回的jQuery promise。

如果您想知道所有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/