我有一个ajax请求,该请求可以获取一些数据,然后将其拆分为一个数组。数组长度是可变的。
var ajax1 = $.ajax({
url: 'myurl.php',
type: "GET",
dataType: "jsonp",
success: function (data) {
//create an array
}
});
一旦有了数组,我就想遍历它,并在每次迭代中运行另一个AJAX请求。我将它放在$ .when中,以确保初始ajax请求已完成:
$.when(ajax1).done(
function() {
for (i = 0; i < array.length; ++i) {
$.ajax({
url: 'anotherurl?=' + myarray[i],
type: "GET",
dataType: "jsonp",
success: function (data) {
//do stuff here
}
});
}
}
)
我的问题是,当for循环完成所有AJAX请求后,如何弹出一个消息框?循环末尾的简单
alert('complete')
无法使用,因为AJAX是异步完成的。 最佳答案
您也可以使用$.when
来实现。您只需要将您发出的所有AJAX请求存储在一个数组中,然后将该数组的apply()
存储到$.when
即可。试试这个:
$.when(ajax1).done(function() {
var requests = [];
for (i = 0; i < array.length; ++i) {
requests.push($.ajax({
url: 'anotherurl?=' + myarray[i],
dataType: "JSONP",
success: function (data) {
// do stuff here
}
}));
}
$.when.apply($, requests).done(function() {
console.log('complete');
});
})
您也可以使用
map()
略微缩短逻辑,尽管请注意,这在$.when(ajax1).done(function() {
var requests = array.map(function() {
return $.ajax({
url: 'anotherurl?=' + myarray[i],
dataType: "JSONP",
success: function (data) {
// do stuff here
}
});
});
$.when.apply($, requests).done(function() {
console.log('complete');
});
})