コレクションを反復処理し、要素ごとに個別の Ajax 呼び出しを行う場合、シーケンスを制御することが不可欠です。サーバーの過負荷やブラウザのフリーズを防ぎます。カスタム イテレータを使用することもできますが、より洗練されたソリューションも利用できます。
jQuery 1.5 以降では、$.ajaxQueue() プラグイン$.Deferred、$.queue()、および $.ajax() を利用してリクエストのシーケンスを管理し、リクエストの完了時に解決される Promise を提供します。
<br>(function($) {</p> <p>var ajaxQueue = $({});</p> <p>$.ajaxQueue = function( ajaxOpts ) {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><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;
};
})(jQuery);
jQuery 1.4 の場合、アニメーション キューをカスタムの「キュー」の作成に利用できます。 jQuery の「fx」キューを使用して、キュー内の最初のリクエストがまだ実行されていない場合に自動的に開始する独自の $.ajaxQueue() プラグインを作成することもできます。
<br>(function($) {<br> var ajaxQueue = $({});</p> <p>$.ajaxQueue = function(ajaxOpts) {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><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); });
};
})(jQuery);
<br>$("#items li").each(function(idx) {<br> $.ajaxQueue({</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">url: '/echo/html/', data: {html : "["+idx+"] "+$(this).html()}, type: 'POST', success: function(data) { $("#output").append($("<li>", { html: data })); }
});
});
これにより、各 Ajax リクエストが順番に実行されるようになり、サーバーの負荷を適切に処理し、ブラウザの応答性を維持できるようになります。
以上が最適な制御のために Ajax リクエストをシーケンスする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。