jQuery 1.5でAjax要求のキューを管理する方法は?
-
24-10-2019 - |
質問
私はjQuery 1.5で新しい延期されたAjax関数をテストしており、そのシンプルさとパワーに感銘を受けています。これらのリクエストを列に並べるための最良の方法に関連する私が持っているより大きな質問があります。
2つのシナリオがあります。シリアルと並列です。ユーザーがキューの処理を待っている間に他のアクションを実行できるように、これらすべてを非同期リクエストにしたいので、同期/非同期用語を避けたいと思います。次に、キューが処理を完了したときに単一の関数を呼び出したいと思います。
「シリアルモード」では、2つのリクエストがあります。
requesta-> responsea-> requestb-> responseb-> endofqueue
2つのリクエストを使用した「パラレルモード」では、この結果が必要です。
requesta-> requestb(responsea、responseb準備がいつでも処理されます) - > endofqueue
どちらの場合でも、リクエストが失敗した場合は、キューを停止し、制御を故障関数に合格させたいと思います。
動的なキューの長さを指定する要件があるので、1つまたは100のアイテムかどうかわからないので、.then()または.wh()を繰り返すだけで並べることができるとは思わない。ベンダーのAPIを介してサーバー上でビジネスロジックを実行しているので、そのコードを制御できないため、サーバー側のバッチは困難です。
「パラレル」ケースを実行するテストケースを作成し、結局正常に完了した後、when()関数を呼び出しましたが、これらのテストはキューの長さで動的ではなく、シリアルモデルにはポータブルではありません。
これを処理するカスタムキューオブジェクトを作成する方法を見ることができますが、すべての部品はjquery(?)ですでに書かれているようです。私は見ましたが、このように連続的な要求をカバーする例を見つけていません。
jQueryキュー/延期機能でこれを処理する方法についての考えはありますか?
解決
requesta-> responsea-> requestb-> responseb注文を達成する最も簡単な方法は、次のようなものを使用することです。
var queue = [];
function qNext() {
$.ajax(queue.shift()).success(qNext);
}
function qAjax(options) {
queue.push(options);
}
qAjax({
// $.ajax options
});
qAjax({
// $.ajax options
});
qNext();
見る デモ.
これはやや単純化されたバージョンの要件ですが、キューが空になった後に実行するためにコールバックを追加するのは簡単です。
requestaの順序は必要ありませんか?> requestb-> responsea-> responseb?
他のヒント
これを参照してください コメント ON .WHEN()メソッドは、延期されたAJAX関数から