可能重复:
Queue AJAX calls
我有一个id列表:
var ids = [3738, 75995, 927, ... ]; // length is about 2000
我想使用http://xx/ + id
请求网址$.getJSON
,例如:
ids.forEach(function(id, index){
$.getJSON('http://xx/' + id, function(data){
// store the data in another array.
});
});
然而,这会在一段时间内产生太多请求,使浏览器暂停一段时间,所以我的问题是,我怎样才能限制jQuery中并发ajax请求的数量?例如,我发送了10个请求,当他们每个人收到回复时,我发送了另一个请求。
答案 0 :(得分:1)
shift()
或pop()
数组中的ID。首先解雇10个请求。然后在ajax调用的complete()
处理程序中,检查数组长度。如果它大于0,setTimeout
几百毫秒(稍微释放浏览器),然后移动或弹出另一个ID并触发另一个请求。
答案 1 :(得分:1)
var $queue = $({});
ids.forEach(function(id, index) {
$queue.queue("ajaxQueue", function( next ) {
$.getJSON('http://xx/' + id, function(data){
// store the data in another array.
next();
});
});
});
$queue.queue("ajaxQueue", function() {
// everything is saved
});
$queue.dequeue("ajaxQueue");
jQuery docs:
<强> SO:强>
同时强>
解决方案应该是如何让后端处理多个ID。 - epascarello
##当时有十个请求:有一些问题!
var $queue = $({}),
handler;
ids.forEach(function(id, index) {
if ( !(index % 10) && handler ) {
$queue.queue("ajaxQueue", handler);
}
handler = (function(prev) {
return function( next ) {
prev();
$.getJSON('http://xx/' + id, function(data){
// store the data in another array.
});
if ( next ) {
next();
}
}
})(handler);
});
$queue.queue("ajaxQueue", function() {
// everything is saved
});
$queue.dequeue("ajaxQueue");
<强> x % y
强>
(index % 10) => Math.floor(index/10)*10 === index;
!(index % 10) => Math.floor(index/10)*10 !== index;
答案 2 :(得分:0)
这应该可以解决问题:
var current;
function fetchCurrentLast()
{
if (current < ids.length)
{
var id = ids[current];
current++;
$.getJSON('http://xx/' + id, function(data){
// store the data in another array.
fetchCurrentLast();
});
}
}
current = 0;
for (var i = 0; i < 10; i++)
{
fetchCurrentLast();
}
答案 3 :(得分:0)
var cnt = 0;
function getEach() {
if (cnt>=ids.length) return;
$.getJSON('http://xx/' + ids[cnt], function(data){
// store the data in another array.
cnt++;
getEach();
// or setTimeout(getEach,1000); to wait a sec
// or if (cnt%10==0) setTimeout(getEach,1000); to wait a sec every 10
// else getEach();
});
}