/** * Ajax Queue Plugin *  * Homepage: http://jquery.com/plugins/project/ajaxqueue * Documentation: http://docs.jquery.com/AjaxQueue *//**<script>$(function(){jQuery.ajaxQueue({url: "test.php",success: function(html){ jQuery("ul").append(html); }});jQuery.ajaxQueue({url: "test.php",success: function(html){ jQuery("ul").append(html); }});jQuery.ajaxSync({url: "test.php",success: function(html){ jQuery("ul").append("<b>"+html+"</b>"); }});jQuery.ajaxSync({url: "test.php",success: function(html){ jQuery("ul").append("<b>"+html+"</b>"); }});});</script><ul style="position: absolute; top: 5px; right: 5px;"></ul> *//* * Queued Ajax requests. * A new Ajax request won't be started until the previous queued  * request has finished. *//* * Synced Ajax requests. * The Ajax request will happen as soon as you call this method, but * the callbacks (success/error/complete) won't fire until all previous * synced requests have been completed. */;(function($) {var ajax = $.ajax;var pendingRequests = {};var synced = [];var syncedData = [];$.ajax = function(settings) {// create settings for compatibility with ajaxSetupsettings = jQuery.extend(settings, jQuery.extend({}, jQuery.ajaxSettings, settings));var port = settings.port;switch(settings.mode) {case "abort": if ( pendingRequests[port] ) {pendingRequests[port].abort();}/* Reiche started hacking /window.setTimeout(function() {pendingRequests[port] = ajax.apply(this, arguments);}, 50 );return 1;/ Reiche ends hacking */return pendingRequests[port] = ajax.apply(this, arguments);case "queue": var _old = settings.complete;settings.complete = function(){if ( _old )_old.apply( this, arguments );jQuery([ajax]).dequeue("ajax" + port );;};jQuery([ ajax ]).queue("ajax" + port, function(){ajax( settings );});return undefined;case "sync":var pos = synced.length;synced[ pos ] = {error: settings.error,success: settings.success,complete: settings.complete,done: false};syncedData[ pos ] = {error: [],success: [],complete: []};settings.error = function(){ syncedData[ pos ].error = arguments; };settings.success = function(){ syncedData[ pos ].success = arguments; };settings.complete = function(){syncedData[ pos ].complete = arguments;synced[ pos ].done = true;if ( pos == 0 || !synced[ pos-1 ] )for ( var i = pos; i < synced.length && synced[i].done; i++ ) {if ( synced[i].error ) synced[i].error.apply( jQuery, syncedData[i].error );if ( synced[i].success ) synced[i].success.apply( jQuery, syncedData[i].success );if ( synced[i].complete ) synced[i].complete.apply( jQuery, syncedData[i].complete );synced[i] = null;syncedData[i] = null;}};}return ajax.apply(this, arguments);};})(jQuery);
