Code for AjaxQueue with example usage:
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 ( as in Ajax.Updater )
optionsQueue: [], //Request options will be pushed into this array
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.Updater calls
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(Ajax.activeRequestCount < AjaxQueue.batchSize) // Check if
the currently processing request count is less than batch size
{
if(AjaxQueue.elementsQueue.first()=="NOTSPECIFIED") {
//Check if an elementID was specified
// Call Ajax.Request if no ElementID specified
//Call Ajax.Request on the first item in the
queue and remove it from the queue
new Ajax.Request(AjaxQueue.urlQueue.shift(),
AjaxQueue.optionsQueue.shift());
var junk = AjaxQueue.elementsQueue.shift();
} else {
// Call Ajax.Updater if an ElementID was
specified.
//Call Ajax.Updater on the first item in the
queue and remove it from the queue
new
Ajax.Updater(AjaxQueue.elementsQueue.shift(), AjaxQueue.urlQueue.shift(),
AjaxQueue.optionsQueue.shift());
}
}
}
};
Ajax.Responders.register({
//Call AjaxQueue._processNext on completion ( success / failure) of any AJAX
call.
onComplete: AjaxQueue._processNext
});
/************* SYNTAX ***************
AjaxQueue.setBatchSize(size);
AjaxQueue.push(URL , OPTIONS, [ElementID]);
************** USAGE ***************
AjaxQueue.setBatchSize(4);
AjaxQueue.push("http://www.testingqueue.com/process/",{onSucess: funcSuccess,
onfailure: funcFailure});
AjaxQueue.push("http://www.testingqueue.com/process1/",{onSucess: funcSuccess1,
onfailure: funcFailure1}, "myDiv");
AjaxQueue.push("http://www.testingqueue.com/process2/",{onSucess: funcSuccess2,
onfailure: funcFailure2});
AjaxQueue.push("http://www.testingqueue.com/process3/",{onSucess: funcSuccess3,
onfailure: funcFailure3});
AjaxQueue.push("http://www.testingqueue.com/process4/",{onSucess: funcSuccess4,
onfailure: funcFailure4});
AjaxQueue.push("http://www.testingqueue.com/process5/",{onSucess: funcSuccess5,
onfailure: funcFailure5});
**********************************/
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Behalf Of Eifion
Sent: Monday, January 30, 2006 6:12 PM
To: [email protected]
Subject: Re: [Rails-spinoffs] Multiple ajax calls
Thanks. I'll have a look at this.
Eifion
On 30 Ion 2006, at 12:27, Irfan, Ghouseuddin Syed wrote:
> I have written this small script for queuing ajax calls. Hope this
> helps.
>
> //--------------------------------------------------------------------
> -
> var AjaxQueue = {
> batchSize: 1,
> urlQueue: [],
> elementsQueue: [],
> optionsQueue: [],
> setBatchSize: function(bSize){
> this.batchSize = bSize;
> },
> push: function(url, options, elementID){
> this.urlQueue.push(url);
> this.optionsQueue.push(options);
> if(elementID!=null){
> this.elementsQueue.push(elementID);
> } else {
> this.elementsQueue.push("NOTSPECIFIED");
> }
>
> this.processNext();
> },
> processNext: function() {
> if(Ajax.activeRequestCount < AjaxQueue.batchSize)
> {
> if(AjaxQueue.elementsQueue.first()=="NOTSPECIFIED") {
> new Ajax.Request(AjaxQueue.urlQueue.shift(),
> AjaxQueue.optionsQueue.shift());
> var junk = AjaxQueue.elementsQueue.shift();
> } else {
> new
> Ajax.Updater(AjaxQueue.elementsQueue.shift(),
> AjaxQueue.urlQueue.shift(), AjaxQueue.optionsQueue.shift());
> }
>
> }
> }
> };
> Ajax.Responders.register({
> onComplete: AjaxQueue.processNext
> });
>
> //--------------------------------------------------------------------
> ----
>
> All the ajax calls should be pushed into the queue. You can set a
> batch size ie the no.of simultaneous ajax calls to be processed.
>
> Usage:
> Ex: AjaxQueue.setBatchSize(2);
>
>
>
>
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] Behalf Of
> Eifion
> Sent: Monday, January 30, 2006 5:39 PM
> To: [email protected]
> Subject: [Rails-spinoffs] Multiple ajax calls
>
>
> This is slightly OT for which I apologise in advance, but I was
> wondering if anyone here has had any problems when making multiple
> ajax calls at the same time. I'm working on a large Intranet
> application which makes heavy use of ajax calls and the bugs are
> flying in from the testers that if they repeatedly click on a link
> that makes an ajax call then Internet Explorer can fall over.
> Obviously I'm making fixes to get around this by disabling the links
> while the calls are made to stop this but it seems that the way
> XMLHTTP works in IE and Mozilla is quite different. If a lot of calls
> are made with IE it seems to try to make them straight away which can
> cause problems. FireFox on the other hand seems to wait and make the
> calls sequentially which can take some time, but at least works.
>
> I was wondering if anyone else here had noticed anything similar and,
> if so, if you'd come up with anyway of stopping IE trying to make too
> many calls at once.
>
> Eifion
> _______________________________________________
> Rails-spinoffs mailing list
> [email protected]
> http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs
> _______________________________________________
> Rails-spinoffs mailing list
> [email protected]
> http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs
_______________________________________________
Rails-spinoffs mailing list
[email protected]
http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs
_______________________________________________
Rails-spinoffs mailing list
[email protected]
http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs