ajax请求将由用户点击
启动无法知道将发送多少请求
我试过ajaxComplete,但是它不起作用,我认为它在页面加载后无法检测到ajax。
function ajax1() {
$.ajax({
url: 'getCount.php',
type: 'GET',
dataType: 'html',
success: function (data) {
var count = parseInt(data);
for (var i = 0; i < count; i++) {
ajax2();
}
}
});
}
function ajax2() {
$.ajax({
url: 'getCount2.php',
type: 'GET',
dataType: 'html',
success: function (data) {
var count = parseInt(data);
for (var i = 0; i < count; i++) {
ajax3();
}
}
});
}
function ajax3() {
$.ajax({
url: 'ajax3.php',
type: 'GET',
dataType: 'html',
success: function (data) {
//do something
}
});
}
$(document).ajaxComplete(function (event, xhr, settings) {
alert('Complete');
});
答案 0 :(得分:3)
更新:非常好的读取承诺:Promises cookbook
正常的做法是使用$.ajax
函数返回的promises。
更改您的功能以返回.ajax
来电的结果:
function ajax1(..) {
return $.ajax(...)
}
然后使用$.when
在所有承诺得到解决后解决新的承诺。
$.when([ajax1(), ajax2(), ajax3()]).then(function() { alert('all complete') })
然而,在更复杂的情况下(和你一样)你需要动态存储对所有promises的引用,并且只有在添加了所有promise之后才调用$.when
。
因此,例如,您可以创建承诺数组,一个用于ajax2
次调用,另一个用于ajax3
次调用。
var ajax2calls = [], ajax3calls=[]
function ajax1() {
return $.ajax({
url: 'getCount.php',
type: 'GET',
dataType: 'html',
success: function (data) {
var count = parseInt(data);
for (var i = 0; i < count; i++) {
ajax2calls.push(ajax2());
}
$.when(ajax2calls).then(function() {
$.when(ajax3calls).then(function() {
alert('all done')
}
})
}
});
}
此外,您可能需要考虑使用Bluebird promise库,因为它提供了比常规promise / A或promise / A +更丰富的API。检查map
,settle
,all
方法等。
答案 1 :(得分:0)
关于您的问题有一个非常相似的问题,请看一下,请:How to know when all ajax calls are complete
答案 2 :(得分:0)
我认为最有意义的方法是进行嵌套回调。这样一切都在回调中发生,没有任何事情发生,直到他们都完成。这些问题可能有助wait for a jquery ajax callback from calling function