2014-10-27 18:46:50 +01:00

44 lines
1.9 KiB
JavaScript

var AjaxQueue = {
batchSize: 1, //No.of simultaneous AJAX requests allowed, Default : 1
urlQueue: [], //Request URLs will be pushed into this array
elementsQueue: [], //Element IDs of elements to be updated on completion of a request
optionsQueue: [], //Request options will be pushed into this array
currentRequest: null,
setBatchSize: function(bSize){ //Method to set a different batch size. Recommended: Set batchSize before making requests
this.batchSize = bSize;
},
push: function(url, options, elementID){ //Push the request in the queue. elementID is optional and required only for Ajax requests that updates the element
this.urlQueue.push(url);
this.optionsQueue.push(options);
if(elementID!=null){
this.elementsQueue.push(elementID);
} else {
this.elementsQueue.push("NOTSPECIFIED");
}
this._processNext();
},
_processNext: function() { // Method for processing the requests in the queue. Private method. Don't call it explicitly
if(this.currentRequest == null && this.urlQueue.length > 0) // Check if the currently processing request count is less than batch size
{
// Call jQuery.ajax on the first item in the queue and remove it from the queue
AjaxQueue.currentRequest = jQuery.ajax(AjaxQueue.urlQueue.shift(), AjaxQueue.optionsQueue.shift());
AjaxQueue.currentRequest.complete( function() {
//Call AjaxQueue._processNext on completion ( success / failure) of this AJAX request.
AjaxQueue.currentRequest = null;
AjaxQueue._processNext();
});
if(this.elementsQueue[0]=="NOTSPECIFIED") { //Check if an elementID was specified
// If no ElementID was specified remove the first item from the queue
var junk = AjaxQueue.elementsQueue.shift();
} else {
// If ElementID was specified update the first item in the queue and remove it from the queue
AjaxQueue.currentRequest.success( function(data) {
jQuery(AjaxQueue.elementsQueue.shift()).html(data);
});
}
}
}
};