首頁  >  文章  >  web前端  >  如何對 Ajax 請求進行排序以實現最佳控制?

如何對 Ajax 請求進行排序以實現最佳控制?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-20 12:32:02542瀏覽

How to Sequence Ajax Requests for Optimal Control?

對Ajax 請求進行排序

迭代集合並對每個元素進行單獨的Ajax 呼叫時,必須控制順序防止伺服器過載和瀏覽器凍結。雖然可以使用自訂迭代器,但還有更優雅的解決方案可用。

jQuery 1.5

在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;
$.ajaxQueue = function( ajaxOpts ) {

};

})(jQuery);

jQuery 1.4

對於jQuery 1.4,動畫佇列可用來建立自訂「佇列」。您也可以建立自己的 $.ajaxQueue() 插件,該插件使用 jQuery 的「fx」佇列自動啟動佇列中的第一個請求(如果尚未執行)。


實作:

> ;
<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 請求按順序執行,從而可以優雅地處理伺服器負載並保持瀏覽器響應能力。

以上是如何對 Ajax 請求進行排序以實現最佳控制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn