Jquery 是否可以在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'

我有一个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') == 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);
    }
  }
});