/client/scripts/jquery.ajaxq.js
https://bitbucket.org/biern/chorobomierz · JavaScript · 63 lines · 30 code · 12 blank · 21 comment · 13 complexity · f236be79d74e09815a9c0b2b36504aed MD5 · raw file
- /*
- * 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] = [];
- }
- }