迭代集合並對每個元素進行單獨的Ajax 呼叫時,必須控制順序防止伺服器過載和瀏覽器凍結。雖然可以使用自訂迭代器,但還有更優雅的解決方案可用。
在jQuery 1.5 及更高版本中,$.ajaxQueue() 插件利用$.Deferred、$.queue() 和$.ajax() 來管理請求排序並提供在請求完成時解析的承諾。
<br>(function($) {<p>var ajaxQueue = $({});</p><p>var ajaxQueue = $({});</p><pre class="brush:php;toolbar:false">var jqXHR, dfd = $.Deferred(), promise = dfd.promise(); ajaxQueue.queue( doRequest ); promise.abort = function( statusText ) { if ( jqXHR ) { return jqXHR.abort( statusText ); } var queue = ajaxQueue.queue(), index = $.inArray( doRequest, queue ); if ( index > -1 ) { queue.splice( index, 1 ); } dfd.rejectWith( ajaxOpts.context || ajaxOpts, [ promise, statusText, "" ] ); return promise; }; function doRequest( next ) { jqXHR = $.ajax( ajaxOpts ) .done( dfd.resolve ) .fail( dfd.reject ) .then( next, next ); } return promise;
};
<p>(function($) {</p> var ajaxQueue = $({});<pre class="brush:php;toolbar:false">var oldComplete = ajaxOpts.complete; ajaxQueue.queue(function(next) { ajaxOpts.complete = function() { if (oldComplete) oldComplete.apply(this, arguments); next(); }; $.ajax(ajaxOpts); });
var ajaxQueue = $({});
$.ajaxQueue = function(ajaxOpts) {
};
})(jQuery);
url: '/echo/html/', data: {html : "["+idx+"] "+$(this).html()}, type: 'POST', success: function(data) { $("#output").append($("<li>", { html: data })); }
<br>$("#items li").each(function(idx) {<br> $.ajaxQueue({<p></p> });});
以上是如何對 Ajax 請求進行排序以實現最佳控制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!