0

JavaScript/AJAXコードを書いています。

サーバーがXML要求を送信された順序で確実に受信するようにする方法はありますか?

プレーンなAjaxを使用していない場合、すべてを1つのWebSocketで送信すると、この保証が得られますか?

ありがとう!

4

3 に答える 3

1

いくつかのオプションが思い浮かびます。

  1. 各XML要求が受信された後(つまり、キューを作成した後)、サーバーからの応答が成功するのを待つことにより、それらを同期的に送信します。
  2. 送信するリクエストの数が事前にわかっている場合は、リクエスト番号を各リクエストのタグとして送信します<requestNum>1</requestNum><numRequests>5</numRequests>。これは、受信した順序を保証するものではありませんが、後で元に戻すことができることを保証し、すべてのデータを確実に保持できるという追加の利点があります。
于 2012-07-24T02:19:55.537 に答える
1

それらが適切な順序で受信されることが最も重要であり、フォームに反復IDを付加するだけでは不十分な場合:

msg_number = 1; sendAJAX(msg_number);  msg_number++;

次に、独自のキューシステムを構築し、後続の各ファイルを前のファイルのコールバックとして送信することをお勧めします。
各要素が独自のAJAXアクセスを持つのではなく、それを処理するためにアプリケーションに1つの集中スポットを作成します。

さまざまなAJAX対応セクションは、それがキューであることを知る必要さえありません。

AJAX.send({ url : "......", method : "post", success : func(){}, syncronous : true });

その反対側では、次のようなものがあります。

AJAX.send = function (obj) {
    if (obj.synchronous) {
        addToSyncQueue(obj); checkQueue();
    } else { fireRequest(); }
};

同期キュー内で行う必要があるのは、古いコールバックの周りに新しい関数をラップすることだけです。

callback = (function (old_cb) {
    return function (response) {
        checkQueue();
        old_cb(response);
    };
}(obj.success));

obj.success = callback;

AJAX.call(obj);

の内部ではcheckQueue、空であるかどうかを確認する必要があります。空でない場合は、を使用します
nextObj = queue.shift();.push()オブジェクトをキューに追加する場合は、必要に応じて先入れ先出しを行います)。

于 2012-07-24T02:44:33.043 に答える
0

私の会社ではajaxQueue、jQueryの主要な貢献者の1人によって書かれたこの小さなプラグインを使用しています。

http://gnarf.net/2011/06/21/jquery-ajaxqueue/

于 2012-07-24T02:15:52.443 に答える