我有 3 个函数,在每个函数中我都有一个本质上同步的 AJAX 调用。
function()
{
a();
b();
c();
}
a()
{
ajaxGet(globals.servicePath + '/Demo.svc/GetDemoList/' + sessionStorage.SessionId,function(data, success) {}, '', {async: false}, false);
}
对于 b() 和 c() 也是类似的。
现在我想等待这些调用的执行,然后继续其他操作,因为这些操作基于我在这里得到的结果。我怎样才能完成这项工作?
最佳答案
- A:永远不要使用
async: false
。那条路通向黑暗面! - B:见 A :)
一种解决方案是使用从 Ajax 调用返回的 jQuery promise 。
如果您想知道所有 3 项何时完成(以任何顺序异步),请使用 $.when()
:
function()
{
$.when(a(), b(), c()).done(function(){
// Now do something else
});
}
并获取每个方法以返回 Ajax 调用的 jQuery promise :
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");
});
关于javascript - 等到带有 ajax 调用的函数在 jquery 中完成执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29607893/