1/** 2 * Ajax Queue Plugin 3 * 4 * Homepage: http://jquery.com/plugins/project/ajaxqueue 5 * Documentation: http://docs.jquery.com/AjaxQueue 6 */ 7 8/** 9 10<script> 11$(function(){ 12 jQuery.ajaxQueue({ 13 url: "test.php", 14 success: function(html){ jQuery("ul").append(html); } 15 }); 16 jQuery.ajaxQueue({ 17 url: "test.php", 18 success: function(html){ jQuery("ul").append(html); } 19 }); 20 jQuery.ajaxSync({ 21 url: "test.php", 22 success: function(html){ jQuery("ul").append("<b>"+html+"</b>"); } 23 }); 24 jQuery.ajaxSync({ 25 url: "test.php", 26 success: function(html){ jQuery("ul").append("<b>"+html+"</b>"); } 27 }); 28}); 29</script> 30<ul style="position: absolute; top: 5px; right: 5px;"></ul> 31 32 */ 33/* 34 * Queued Ajax requests. 35 * A new Ajax request won't be started until the previous queued 36 * request has finished. 37 */ 38 39/* 40 * Synced Ajax requests. 41 * The Ajax request will happen as soon as you call this method, but 42 * the callbacks (success/error/complete) won't fire until all previous 43 * synced requests have been completed. 44 */ 45 46 47(function($) { 48 49 var ajax = $.ajax; 50 51 var pendingRequests = {}; 52 53 var synced = []; 54 var syncedData = []; 55 56 $.ajax = function(settings) { 57 // create settings for compatibility with ajaxSetup 58 settings = jQuery.extend(settings, jQuery.extend({}, jQuery.ajaxSettings, settings)); 59 60 var port = settings.port; 61 62 switch(settings.mode) { 63 case "abort": 64 if ( pendingRequests[port] ) { 65 pendingRequests[port].abort(); 66 } 67 return pendingRequests[port] = ajax.apply(this, arguments); 68 case "queue": 69 var _old = settings.complete; 70 settings.complete = function(){ 71 if ( _old ) 72 _old.apply( this, arguments ); 73 jQuery([ajax]).dequeue("ajax" + port );; 74 }; 75 76 jQuery([ ajax ]).queue("ajax" + port, function(){ 77 ajax( settings ); 78 }); 79 return; 80 case "sync": 81 var pos = synced.length; 82 83 synced[ pos ] = { 84 error: settings.error, 85 success: settings.success, 86 complete: settings.complete, 87 done: false 88 }; 89 90 syncedData[ pos ] = { 91 error: [], 92 success: [], 93 complete: [] 94 }; 95 96 settings.error = function(){ syncedData[ pos ].error = arguments; }; 97 settings.success = function(){ syncedData[ pos ].success = arguments; }; 98 settings.complete = function(){ 99 syncedData[ pos ].complete = arguments; 100 synced[ pos ].done = true; 101 102 if ( pos == 0 || !synced[ pos-1 ] ) 103 for ( var i = pos; i < synced.length && synced[i].done; i++ ) { 104 if ( synced[i].error ) synced[i].error.apply( jQuery, syncedData[i].error ); 105 if ( synced[i].success ) synced[i].success.apply( jQuery, syncedData[i].success ); 106 if ( synced[i].complete ) synced[i].complete.apply( jQuery, syncedData[i].complete ); 107 108 synced[i] = null; 109 syncedData[i] = null; 110 } 111 }; 112 } 113 return ajax.apply(this, arguments); 114 }; 115 116})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.