6

私はjquery1.5で新しい遅延AJAX関数をテストしてきましたが、そのシンプルさとパワーに感銘を受けました。これらのリクエストをキューに入れるための最良の方法に関して、私が持っているより大きな質問があります。

必要に応じて、シリアルとパラレルの2つのシナリオがあります。同期/非同期の用語を避けたいのは、これらすべてを非同期リクエストにして、ユーザーがキューの処理を待っている間に他のアクションを実行できるようにするためです。次に、キューの処理が完了したときに1つの関数を呼び出します。

2つのリクエストがある「シリアルモード」では、次のように処理する必要があります。

RequestA-> ResponseA-> RequestB-> ResponseB-> EndOfQueue

2つのリクエストがある「パラレルモード」では、次の結果が必要です。

RequestA-> RequestB(ResponseA、ResponseBは準備ができたらいつでも処理されます)-> EndOfQueue

いずれの場合も、いずれかのリクエストが失敗した場合は、キューを停止して、失敗した関数に制御を渡します。

動的キューの長さを指定する要件があるので、.then()または.when()の遅延をまとめて文字列化することはできないと思います。これは、100アイテムか100アイテムかわからないためです。 。ベンダーのAPIを介してサーバー上でビジネスロジックを実行しているため、サーバー側のバッチ処理は、そのコードを制御できないため困難になります。

「並列」ケースを実行し、すべてが正常に完了した後にwhen()関数を呼び出すテストケースを作成しましたが、これらのテストはキューの長さが動的ではなく、シリアルモデルに移植できません。

これを処理するカスタムキューオブジェクトを作成する方法はわかりますが、すべての部分がすでにjquery(?)で記述されているようです。私は調べましたが、このようにシーケンシャルリクエストをカバーする例は見つかりませんでした。

jqueryキュー/遅延機能でこれを処理する方法について何か考えはありますか?

4

3 に答える 3

4

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();

DEMOを参照してください。

これは要件のやや単純化されたバージョンですが、キューが空になった後に実行するコールバックを追加するのは簡単です。

RequestA-> RequestB-> ResponseA-> ResponseBの順序を望まないのですか?

于 2011-03-15T21:07:48.603 に答える
1

私が尋ねた2つの質問を参照してください

  1. jQueryDeferredが機能しない
  2. jQuery。理解するとき

うまくいけば、あなたは概念を理解することができるはずです。

于 2011-03-17T09:21:47.920 に答える
0

遅延AJAX関数からの.when()メソッドに関するこのコメントを参照してください

于 2011-03-15T20:23:21.533 に答える