116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * 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); |