comparison media/js/jquery-autocomplete/lib/jquery.ajaxQueue.js @ 45:a5b4c5ce0658

Breaking down and controlling all media files, including javascript libraries.
author Brian Neal <bgneal@gmail.com>
date Fri, 19 Jun 2009 03:16:03 +0000
parents
children
comparison
equal deleted inserted replaced
44:08cd19c1ee50 45:a5b4c5ce0658
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);