Jquery 是否可以在for循环语句下完成所有ajax调用后运行代码?
我有一个for循环语句,每个循环将执行一个ajax调用Jquery 是否可以在for循环语句下完成所有ajax调用后运行代码?,jquery,ajax,each,Jquery,Ajax,Each,我有一个for循环语句,每个循环将执行一个ajax调用 $.each(arr, function(i, v) { var url = '/xml.php?id=' + v; $.ajax({ url: url, type: 'GET', dataType: 'xml', success: function(xml) { if ($(xml).find('Lists').attr('total'
$.each(arr, function(i, v) {
var url = '/xml.php?id=' + v;
$.ajax({
url: url,
type: 'GET',
dataType: 'xml',
success: function(xml) {
if ($(xml).find('Lists').attr('total') == 1) {
// some code here
}
},
complete: function() {
// some code here
}
})
})
我想在循环下完成所有ajax调用后运行代码,我试着将代码放在最后一行,当ajax调用完成时它不会执行
if (i == arr.length - 1) {
// some code here
}
因此,如果我有10次循环,就有10次ajax调用。我想在完成10次ajax调用后运行一段代码,有什么想法吗
使用.ajaxComplete()
或.done()
来实现它更好吗
谢谢尝试使用
我遇到了一个类似的场景,但在循环中,AJAX调用是在另一个函数调用(称为fetchData)中完成的 因此,我让fetchData函数返回来自AJAX调用的Promise,并使用then子句将其链接起来以处理响应 普朗克链接
$(document).ready(function() {
var message = '';
process();
function process() {
var promises = [];
for (var i = 0; i < 3; i++) {
var promise;
(function (index) {
promise = fetchData(index).then(function (response) {
// do something with the response.
message += 'Iteration ' + index + '\n';
});
})(i);
promises.push(promise);
}
$.when.apply($, promises).then(function () {
// do something after all the AJAX calls are completed.
alert(message);
});
}
function fetchData(param) {
return $.ajax('data.json')
.success(fetchDataSuccess)
.error(fetchDataFailed);
function fetchDataSuccess(response) {
return response;
}
function fetchDataFailed(error) {
console.error(error);
}
}
});
$(文档).ready(函数(){
var消息=“”;
过程();
函数过程(){
var承诺=[];
对于(变量i=0;i<3;i++){
var承诺;
(功能(索引){
promise=fetchData(索引)。然后(函数(响应){
//对回应做点什么。
消息+='迭代'+索引+'\n';
});
})(i) );
承诺。推动(承诺);
}
$.when.apply($,promises).then(函数(){
//在所有AJAX调用完成后执行一些操作。
警报(信息);
});
}
函数fetchData(param){
返回$.ajax('data.json')
.success(fetchDataSucces)
.错误(fetchDataFailed);
函数fetchDataSucces(响应){
返回响应;
}
函数fetchDataFailed(错误){
控制台错误(error);
}
}
});
我认为您需要使用ajaxQueue,请尝试此链接谢谢您的建议,但是arr.push(xhr)的含义是什么代码>和。应用($,arr)
?谢谢。如果您查看when
的文档,您会发现,当所有不同的对象传递到when
时,为when注册的回调将完成。现在我们必须收集由ajax调用创建的所有xhr对象,因此我使用一个数组来使用arr.push(xhr)存储这些xhr对象我知道了,谢谢。但是关于.apply($,arr)
,这段代码的含义是什么?当函数希望不同的对象列表作为不同的参数传递,如$。当(diff1,diff2,…,diffn)
时,我们有一个xhr
对象列表,用于将数组再次转换为参数列表。如果您不介意的话,我还有一个问题……我在ajax success属性下面添加了console.log(I)
,发现执行顺序不正确(例如0、1、3、2、4)。如何更改代码以使ajax函数按顺序执行?
$(document).ready(function() {
var message = '';
process();
function process() {
var promises = [];
for (var i = 0; i < 3; i++) {
var promise;
(function (index) {
promise = fetchData(index).then(function (response) {
// do something with the response.
message += 'Iteration ' + index + '\n';
});
})(i);
promises.push(promise);
}
$.when.apply($, promises).then(function () {
// do something after all the AJAX calls are completed.
alert(message);
});
}
function fetchData(param) {
return $.ajax('data.json')
.success(fetchDataSuccess)
.error(fetchDataFailed);
function fetchDataSuccess(response) {
return response;
}
function fetchDataFailed(error) {
console.error(error);
}
}
});