63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
/*
|
|
* jQuery AjaxQ - AJAX request queueing for jQuery
|
|
*
|
|
* Version: 0.0.1
|
|
* Date: July 22, 2008
|
|
*
|
|
* Copyright (c) 2008 Oleg Podolsky (oleg.podolsky@gmail.com)
|
|
* Licensed under the MIT (MIT-LICENSE.txt) license.
|
|
*
|
|
* http://plugins.jquery.com/project/ajaxq
|
|
* http://code.google.com/p/jquery-ajaxq/
|
|
*/
|
|
|
|
jQuery.ajaxq = function (queue, options)
|
|
{
|
|
// Initialize storage for request queues if it's not initialized yet
|
|
if (typeof document.ajaxq == "undefined") document.ajaxq = {q:{}, r:null};
|
|
|
|
// Initialize current queue if it's not initialized yet
|
|
if (typeof document.ajaxq.q[queue] == "undefined") document.ajaxq.q[queue] = [];
|
|
|
|
if (typeof options != "undefined") // Request settings are given, enqueue the new request
|
|
{
|
|
// Copy the original options, because options.complete is going to be overridden
|
|
|
|
var optionsCopy = {};
|
|
for (var o in options) optionsCopy[o] = options[o];
|
|
options = optionsCopy;
|
|
|
|
// Override the original callback
|
|
|
|
var originalCompleteCallback = options.complete;
|
|
|
|
options.complete = function (request, status)
|
|
{
|
|
// Dequeue the current request
|
|
document.ajaxq.q[queue].shift ();
|
|
document.ajaxq.r = null;
|
|
|
|
// Run the original callback
|
|
if (originalCompleteCallback) originalCompleteCallback (request, status);
|
|
|
|
// Run the next request from the queue
|
|
if (document.ajaxq.q[queue].length > 0) document.ajaxq.r = jQuery.ajax (document.ajaxq.q[queue][0]);
|
|
};
|
|
|
|
// Enqueue the request
|
|
document.ajaxq.q[queue].push (options);
|
|
|
|
// Also, if no request is currently running, start it
|
|
if (document.ajaxq.q[queue].length == 1) document.ajaxq.r = jQuery.ajax (options);
|
|
}
|
|
else // No request settings are given, stop current request and clear the queue
|
|
{
|
|
if (document.ajaxq.r)
|
|
{
|
|
document.ajaxq.r.abort ();
|
|
document.ajaxq.r = null;
|
|
}
|
|
|
|
document.ajaxq.q[queue] = [];
|
|
}
|
|
} |