/** | |
* 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(); | |
} | |
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; | |
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); |