我有一个带有3个ajax调用的函数
var loadEditModalAddressData(){
loadCountries();
loadStates();
loadDistricts();
};
我想从js等待,直到所有的ajax调用完成。
我的部分代码
loadEditModalAddressData();
$(document).ajaxStop(function(){
// functionality using requested data
....
}
这很好用,直到我添加了额外的功能,并发现在每个完整的请求(或一堆请求)之后调用 $(document).ajaxStop ,而不仅仅是在某个函数范围内,混搭我的代码功能。
我该怎么做?
答案 0 :(得分:3)
肮脏的方式可能是使用ajaxStop
中的计数器来确保所有三个调用都已返回。稍微好一点的方法是为每个呼叫添加回调,并在收到最后一个呼叫时启动处理。
然而,最好的方法可能是使用承诺。 如果您使用jQuery来进行调用,您可以执行以下操作:
$.when(call1, call2, call3).then(function(results){
// your stuffs
});
callX
返回$.get
(或任何其他jQuery承诺)的地方。
看看here。
答案 1 :(得分:1)
使用$.when
等待多个deferreds / promises。它与原生Promise.all()
同义。