jQuery限制同时AJAX请求的数量

所以我想要触发一系列AJAX事件,但是我希望将同时请求的数量限制为5,并将剩下的请求排队。 例如,我有以下内容:

$("div.server").each(function() { $.ajax(....); }); 

因此,类server可能有100个div,但我想在任何给定时间只运行5个请求。 一旦请求完成,它应该继续下一个。

做这个的最好方式是什么?

最好的方法是让浏览器处理它。 通常,浏览器已经具有每主机连接限制,因此如果存在太多,它们将自动对连接进行排队。

但是,我会考虑更改API,以便从多个元素中获取日期,并返回多个元素的数据 – 即减少必要的HTTP请求的总数。

使用名为queueRequest的函数将所有请求参数推送到队列并调用checkQueuecheckQueue检查队列中是否有项目以及活动请求的数量是否小于5.如果满足这些条件,它会从队列中弹出一个请求并将其转换为真正的AJAX请求。 然后它将一个done处理程序附加到请求,减少活动请求计数并调用checkQueue

如果仍然不确定浏览器排队请求的function,你可以尝试这样的事情:

 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); }); }); }); 

您可能需要根据自己的需要进行调整。