У нас есть следующий дроссель AJAX. Это было реализовано, чтобы иметь возможность выполнять множество (20+) запросов ajax для одной страницы без тайм-аута оставшейся части только потому, что первые X-запросы заняли в общей сложности 60 секунд.
RequestThrottler: {
maximumConcurrentRequests: 3, //default to 3
requestQueue: new Array(),
numberOfRequestCurrentlyProcessing: 0,
addRequestToQueue: function (currentRequest) {
var self = this;
self.requestQueue.push(currentRequest);
if (self.numberOfRequestCurrentlyProcessing < self.maximumConcurrentRequests) { self.sendNextRequest(); }
},
sendNextRequest: function () {
var self = this;
if (self.numberOfRequestCurrentlyProcessing >= self.maximumConcurrentRequests) { return; }
if (self.requestQueue.length === 0) { return; }
var currentRequest = self.requestQueue.pop();
self.numberOfRequestCurrentlyProcessing++;
AJAX.SendAjaxRequest(currentRequest.url, currentRequest.httpMethod,
function(data){
self.numberOfRequestCurrentlyProcessing--;
currentRequest.onSuccessCallback(data);
self.sendNextRequest();
},
function(){
self.numberOfRequestCurrentlyProcessing--;
currentRequest.onErrorCallback();
self.sendNextRequest();
});
},
sendUpdateRequest: function (currentRequest) {
var self = this;
self.addRequestToQueue(currentRequest);
}
}
Однако, поскольку эти запросы находятся в очереди Javascript, когда пользователь пытается загрузить новую страницу, инструменты разработчика показывают ответы в области NET новой страницы. В нашем приложении есть проверка по соображениям конфиденциальности, чтобы запретить подобное поведение. Это нормально для браузеров, или это какая-то ошибка, или я что-то делаю не так?