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

10-05 20:50
查看更多