当从$.ajax调用记录时,Javascript数组返回无序索引列表
我有一个正好由10个元素组成的简单数组;它们的键、值对在记录时返回的顺序正确当从$.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调用并且从那里记录数组时,索引返回无序(每次刷新页面只是随机化顺序)
$.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.
});
});
我很快就会试试的。非常感谢。我很快就会试试的。非常感谢。