Mercurial > public > sg101
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); |