我有一系列的 AJAX 事件需要触发,但我想限制同时请求的数量为 5,并将其余请求排队。例如,我有以下代码:
$("div.server").each(function() {
$.ajax(....);
});
可能有100个class为server
的div,但我只想在任何给定时间运行5个请求。一旦一个请求完成,它应该继续下一个。
最好的做法是什么?
我有一系列的 AJAX 事件需要触发,但我想限制同时请求的数量为 5,并将其余请求排队。例如,我有以下代码:
$("div.server").each(function() {
$.ajax(....);
});
可能有100个class为server
的div,但我只想在任何给定时间运行5个请求。一旦一个请求完成,它应该继续下一个。
最好的做法是什么?
queueRequest
的函数中的队列中,并调用 checkQueue
函数。checkQueue
检查队列中是否有项目,以及活动请求数量是否小于 5。如果满足这些条件,则从队列中弹出一个请求并将其转换为真正的 AJAX 请求。然后,它会附加一个 done
处理程序到该请求,减少活动请求计数并调用 checkQueue
。var count = 0; // Number of functions being called
var funcArray = []; // Array of functions waiting
var MAX_REQUESTS = 5; // Max requests
var CALL_WAIT = 100; // 100ms
function call()
{
// Check if count doesn't exceeds or if there aren't any functions to call
if(count >= MAX_REQUESTS || funcArray.length == 0)
// Call call() after 100ms
setTimeout(function() { call() }, CALL_WAIT);
count++; // Add request to the counter
var func = funcArray.pop();
$.ajax(..., function(data)
{
func(data);
// .......
count--; // Substract request to the counter
});
}
$(function()
{
call(); // First call to start polling. It will call itself each 100ms
});
$(function()
{
$("div.server").each(function() {
funcArray.push(function(data)
{
alert(data);
});
});
});
你可能需要根据自己的需求进行微调。