当从$.ajax调用记录时,Javascript数组返回无序索引列表

当从$.ajax调用记录时,Javascript数组返回无序索引列表,javascript,arrays,ajax,indexing,unordered,Javascript,Arrays,Ajax,Indexing,Unordered,我有一个正好由10个元素组成的简单数组;它们的键、值对在记录时返回的顺序正确 $.each( sArray, function(i, k) { log(i, k); // log(i, k) returns correctly // [0] ELEMENT ONE // [1] ELEMENT TWO // [2] ELEMENT THREE }); 但是,我很难理解为什么当引入$.ajax调用并且从那里记录数组时,索引返回无序(每次刷新页面只是随机化顺序)

我有一个正好由10个元素组成的简单数组;它们的键、值对在记录时返回的顺序正确

$.each( sArray, function(i, k) {
   log(i, k);

   // log(i, k) returns correctly 
   // [0] ELEMENT ONE
   // [1] ELEMENT TWO
   // [2] ELEMENT THREE

});
但是,我很难理解为什么当引入
$.ajax
调用并且从那里记录数组时,索引返回无序(每次刷新页面只是随机化顺序)


键、值对匹配,但只是无序。有人能解释这种行为吗?谢谢大家!

因为AJAX是异步的。AJAX操作的完成顺序没有保证

如果需要顺序保持一致,那么可能需要首先完成所有AJAX操作,然后按照数组的顺序执行操作。也许是这样的:

let promises = [];
$.each( sArray, function(i, k) {
  promises.push(
    $.ajax({
      /.../
      success: function(data){
        // Do something with data?
        // Maybe add it as a property to k?
        // For example:
        k.data = data;
      }
    })
  );
});

Promise.all(promises).then(function () {
  // Here all of the AJAX operations are complete.
  // You can again iterate over the array in the order you like:
  $.each(sArray, function(i, k) {
    log(i, k);
    // In this example, k.data should have the data received from AJAX.
  });
});

因为AJAX是异步的。AJAX操作的完成顺序没有保证

如果需要顺序保持一致,那么可能需要首先完成所有AJAX操作,然后按照数组的顺序执行操作。也许是这样的:

let promises = [];
$.each( sArray, function(i, k) {
  promises.push(
    $.ajax({
      /.../
      success: function(data){
        // Do something with data?
        // Maybe add it as a property to k?
        // For example:
        k.data = data;
      }
    })
  );
});

Promise.all(promises).then(function () {
  // Here all of the AJAX operations are complete.
  // You can again iterate over the array in the order you like:
  $.each(sArray, function(i, k) {
    log(i, k);
    // In this example, k.data should have the data received from AJAX.
  });
});

我很快就会试试的。非常感谢。我很快就会试试的。非常感谢。