我遇到了这个问题,基本上,我有一个大数组,每次循环执行循环时我都会分解为更小的数组。在循环中,我有一个ajax调用,它将该数组发送到url。问题是它只进行一次ajax调用,但它会在控制台中记录其他较小的数组。知道为什么会这样吗?
//emailArray = [email1@something.com, email2@something.com..... (up to a number greater than 10)
while(emailArray.length) {
console.log(emailArray.splice(0,10));
$.ajax({
url:"some/url",
type: "POST",
data: {
"object": emailArray.splice(0,10)
},
dataType: "json",
success: function (data, status, xhr) {
//callback(data);
console.log('data from success');
console.log(data);
}
});
console.log('after ajax');
}
编辑,循环旨在为大数组中的每10个项发送一个新的ajax请求,并且发送的数组中有10个项。当我在控制台中记录它们时,.splice将数组分解得很好......但它没有做ajax部分
答案 0 :(得分:3)
.splice()
对源数组具有破坏性,因此您的console.log(emailArray.splice(0,10));
会弄乱emailArray并导致您错过迭代。
您可以在.slice()
语句中使用.splice()
(这不是破坏性的,但会返回副本)而不是console.log()
,如下所示:
//emailArray = [email1@something.com, email2@something.com..... (up to a number greater than 10)
while(emailArray.length) {
console.log(emailArray.slice(0,10));
$.ajax({
url:"some/url",
type: "POST",
data: {
"object": emailArray.splice(0,10)
},
dataType: "json",
success: function (data, status, xhr) {
//callback(data);
console.log('data from success');
console.log(data);
}
});
console.log('after ajax');
}