等到具有ajax调用的函数在jquery中完成执行
我有3个函数,在每个函数中我都有一个同步的AJAX调用。
function() { a(); b(); c(); } a() { ajaxGet(globals.servicePath + '/Demo.svc/GetDemoList/' + sessionStorage.SessionId,function(data, success) {}, '', {async: false}, false); }
类似地对于b()和c()。
现在我想等待执行这些调用,然后继续执行其他操作,因为这些操作基于我到达的结果。 我怎么能这样做?
- 答:永远不要使用
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/