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