Javascript 在循环内延迟向数组添加新对象
我有一个Javascript 在循环内延迟向数组添加新对象,javascript,jquery,arrays,ajax,Javascript,Jquery,Arrays,Ajax,我有一个for循环,需要在迭代之间延迟一秒进行AJAX调用。它应该抓住对象并。将其推到阵列上。下面的代码只添加第一个对象。我做错了什么 var maxLoops = 10; var counter = 0; (function processPages() { if(counter++ >= maxLoops) return; setTimeout(function() { //check page count and loop. push all ne
for
循环,需要在迭代之间延迟一秒进行AJAX
调用。它应该抓住对象并。将其推到阵列上。下面的代码只添加第一个对象。我做错了什么
var maxLoops = 10;
var counter = 0;
(function processPages() {
if(counter++ >= maxLoops) return;
setTimeout(function() {
//check page count and loop. push all new objects into allProducts
for (var i=1; i <= totalPages; i++){
$.ajax({ url: '/process.php',
data: {category: 'sportingGoods', page: i},
type: 'post',
success: function(output) {
allProducts.push(output);
}
})
}
}), 1000;
})();
var maxLoops=10;
var计数器=0;
(函数processPages(){
if(counter++>=maxLoops)返回;
setTimeout(函数(){
//检查页面计数和循环。将所有新对象推送到所有产品中
对于(var i=1;i如果您想执行一些ajax调用并在它们之间等待,可以执行以下操作:
(function processPages(i) {
if (i===totalPages) {
// all the pages have been fetched, you may
// use the allProducts array here
return;
}
$.ajax({ url: '/process.php',
data: {category: 'sportingGoods', page: i},
type: 'post',
success: function(output) {
allProducts.push(output);
setTimeout(processPages, 1000, i+1);
}
})
})(0);
当i
为totalPages
时,此操作将停止。如果要执行一些ajax调用并在它们之间等待,可以执行以下操作:
(function processPages(i) {
if (i===totalPages) {
// all the pages have been fetched, you may
// use the allProducts array here
return;
}
$.ajax({ url: '/process.php',
data: {category: 'sportingGoods', page: i},
type: 'post',
success: function(output) {
allProducts.push(output);
setTimeout(processPages, 1000, i+1);
}
})
})(0);
var maxLoops = 10;
var counter = 0;
(function processPages() {
if (counter++ >= maxLoops) return;
for (var i = 1; i <= totalPages; i++) {
setTimeout(function () {
//check page count and loop. push all new objects into allProducts
$.ajax({
url: '/process.php',
data: {category: 'sportingGoods', page: i},
type: 'post',
success: function (output) {
allProducts.push(output);
if(allProducts.length === totalPages){
// call final function - array filled
}
}
})
}, 1000 * i);
}
})();
当i
为totalPages
时,此操作将停止。如果要执行一些ajax调用并在它们之间等待,可以执行以下操作:
(function processPages(i) {
if (i===totalPages) {
// all the pages have been fetched, you may
// use the allProducts array here
return;
}
$.ajax({ url: '/process.php',
data: {category: 'sportingGoods', page: i},
type: 'post',
success: function(output) {
allProducts.push(output);
setTimeout(processPages, 1000, i+1);
}
})
})(0);
var maxLoops = 10;
var counter = 0;
(function processPages() {
if (counter++ >= maxLoops) return;
for (var i = 1; i <= totalPages; i++) {
setTimeout(function () {
//check page count and loop. push all new objects into allProducts
$.ajax({
url: '/process.php',
data: {category: 'sportingGoods', page: i},
type: 'post',
success: function (output) {
allProducts.push(output);
if(allProducts.length === totalPages){
// call final function - array filled
}
}
})
}, 1000 * i);
}
})();
当i
为totalPages
时,此操作将停止。如果要执行一些ajax调用并在它们之间等待,可以执行以下操作:
(function processPages(i) {
if (i===totalPages) {
// all the pages have been fetched, you may
// use the allProducts array here
return;
}
$.ajax({ url: '/process.php',
data: {category: 'sportingGoods', page: i},
type: 'post',
success: function(output) {
allProducts.push(output);
setTimeout(processPages, 1000, i+1);
}
})
})(0);
var maxLoops = 10;
var counter = 0;
(function processPages() {
if (counter++ >= maxLoops) return;
for (var i = 1; i <= totalPages; i++) {
setTimeout(function () {
//check page count and loop. push all new objects into allProducts
$.ajax({
url: '/process.php',
data: {category: 'sportingGoods', page: i},
type: 'post',
success: function (output) {
allProducts.push(output);
if(allProducts.length === totalPages){
// call final function - array filled
}
}
})
}, 1000 * i);
}
})();
当i
为totalPages
var maxLoops=10时,此操作将停止;
var maxLoops = 10;
var counter = 0;
(function processPages() {
if (counter++ >= maxLoops) return;
for (var i = 1; i <= totalPages; i++) {
setTimeout(function () {
//check page count and loop. push all new objects into allProducts
$.ajax({
url: '/process.php',
data: {category: 'sportingGoods', page: i},
type: 'post',
success: function (output) {
allProducts.push(output);
if(allProducts.length === totalPages){
// call final function - array filled
}
}
})
}, 1000 * i);
}
})();
var计数器=0;
(函数processPages(){
if(counter++>=maxLoops)返回;
对于(var i=1;ivar maxLoops=10;
var计数器=0;
(函数processPages(){
if(counter++>=maxLoops)返回;
对于(var i=1;ivar maxLoops=10;
var计数器=0;
(函数processPages(){
if(counter++>=maxLoops)返回;
对于(var i=1;ivar maxLoops=10;
var计数器=0;
(函数processPages(){
if(counter++>=maxLoops)返回;
对于(var i=1;i),您的代码似乎与描述完全不匹配。您等待,然后执行几个ajax调用,所有这些调用同时进行,然后就结束了。您的目标是在这些ajax调用之间等待吗?此外,totalPages
来自哪里?为什么您要push(响应)
而不是push(输出)
?可能我混淆了这一点和/或过于复杂。我想进行10次AJAX调用,并将返回的对象推送到一个数组中。我需要API限制带来的延迟。您的for循环应该在timeout函数之外,AJAX调用应该是其中唯一的内容。现在您正在循环1到“totalPages”一次完成。您的代码似乎与描述完全不匹配。您等待,然后执行几个ajax调用,所有这些调用同时进行,然后就结束了。您的目标是在这些ajax调用之间等待吗?此外,totalPages
从何而来?为什么您要推送(响应)
而不是推送(输出)
?可能我混淆了这一点和/或过于复杂。我想进行10次AJAX调用,并将返回的对象推送到一个数组中。我需要API限制带来的延迟。您的for循环应该在timeout函数之外,AJAX调用应该是其中唯一的内容。现在您正在循环1到“totalPages”一次完成。您的代码似乎与描述完全不匹配。您等待,然后执行几个ajax调用,所有这些调用同时进行,然后就结束了。您的目标是在这些ajax调用之间等待吗?此外,totalPages
从何而来?为什么您要推送(响应)
而不是推送(输出)
?可能我混淆了这一点和/或过于复杂。我想进行10次AJAX调用,并将返回的对象推送到一个数组中。我需要API限制带来的延迟。您的for循环应该在timeout函数之外,AJAX调用应该是其中唯一的内容。现在您正在循环1到“totalPages”一次完成。您的代码似乎与描述完全不匹配。您等待,然后执行几个ajax调用,所有这些调用同时进行,然后就结束了。您的目标是在这些ajax调用之间等待吗?此外,totalPages
从何而来?为什么您要推送(响应)
而不是推送(输出)
?可能我混淆了这一点和/或过于复杂。我想进行10次AJAX调用,并将返回的对象推送到一个数组中。我需要API限制带来的延迟。您的for循环应该在timeout函数之外,AJAX调用应该是其中唯一的内容。现在您正在循环1到“totalPages”一次完成。所以不要忘记,totalPages
实际上是您在示例中创建的maxLoops
var hmm…仍然返回1个结果您需要等待10秒才能尝试显示结果。@检查totalPages
?AJAX调用是否全部成功?因为没有失败回调,这将停止任何调用失败时的操作。此外,setTimeout(processPages,1000,i+1)
仅在IE>=10
中。我建议setTimeout(function(){processPages(i+1);},1000)
相反。所以不要忘记,totalPages
实际上是您在示例中创建的maxLoops
var hmm…仍然返回1个结果您需要等待10秒才能尝试显示结果。@pauld检查totalPages
?AJAX调用是否全部成功?因为没有失败回调,这将在任何调用失败时停止操作。setTimeout(processPages,1000,i+1)
仅在IE>=10
中。我建议setTimeout(function(){processPages(i+1);},1000)
相反。所以不要忘记,totalPages
实际上是您在示例中创建的maxLoops
var hmm…仍然返回1个结果您需要等待10秒才能尝试显示结果。@pauld检查totalPages
?AJAX调用是否全部成功?因为没有失败回调,这将在任何调用失败时停止操作。setTimeout(processPages,1000,i+1)
仅在IE>=10
中。我建议使用setTimeout(function(){processPages(i+1);},1000)
。因此不要忘记totalPages
实际上是您在示例中创建的maxLoops
变量