| /** |
| * 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(jQuery) { |
| |
| var ajax = jQuery.ajax; |
| |
| var pendingRequests = {}; |
| |
| var synced = []; |
| var syncedData = []; |
| |
| jQuery.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); |
| }; |
| |
| })((typeof window.jQuery == 'undefined' && typeof window.django != 'undefined') |
| ? django.jQuery |
| : jQuery |
| ); |