3

dojo.xhrPostを使用して Ajax リクエストを送信
していますfunction sendRequest()

サーバーに同じ ajax Post を継続的に (3 秒ごとに) 送信するようになり
ました Dojo でサーバー ポーリングを実装するにはどうすればよいですか? 基本的sendRequest()に3秒ごとに呼び出す必要があります

4

3 に答える 3

3

Dojo にポーリング用のメソッドが組み込まれているとは思えないので、フレームワーク全体に適用できる一般的なメソッドを次に示します。

var Poll = function(pollFunction, intervalTime) {
    var intervalId = null;

    this.start = function(newPollFunction, newIntervalTime) {
        pollFunction = newPollFunction || pollFunction;
        intervalTime = newIntervalTime || intervalTime;

        if ( intervalId ) {
            this.stop();
        }

        intervalId = setInterval(pollFunction, intervalTime);
    };

    this.stop = function() {
        clearInterval(intervalId);
    };
};

使用法:

var p = new Poll(function() { console.log("hi!"); }, 1000);
p.start();
setTimeout(function() { p.stop();}, 5000);

またはあなたの場合:

var p = new Poll(sendRequest, 3000);
p.start();

これを Dojo パッケージとして使用する場合は、次の簡単な拡張機能を使用できます。

dojo.provide("Poll");

dojo.declare("Poll", null, {
    intervalId:   null,
    pollFunction: null,
    intervalTime: null,

    constructor: function(newPollFunction, newIntervalTime) {
        this.pollFunction = newPollFunction;
        this.intervalTime = newIntervalTime;
    },

    start: function(newPollFunction, newIntervalTime) {
        this.pollFunction = newPollFunction || this.pollFunction;
        this.intervalTime = newIntervalTime || this.intervalTime;

        this.stop();
        this.intervalId = setInterval(this.pollFunction, this.intervalTime);
    },

    stop: function() {
        clearInterval(this.intervalId);
    }
});

使用法:

var p = new Poll(function() {console.log("hi");}, 250);
p.start();
setTimeout(dojo.hitch(p, p.stop), 1000);
于 2010-03-16T16:09:18.183 に答える
0

次のようにする方が良いことがわかりました。

  1. 空の配列 (キュー) を含む変数がある
  2. ポーリングする setInterval は、ポーリングごとに、新しいオブジェクト (ポーリング パラメーターを使用) を配列 (キュー) にプッシュします。同じパラメーターを持つオブジェクトを 1 つのオブジェクトに折りたたむことで、ポーリングを圧縮することもできます。これらのオブジェクトにハンドラー関数を配置することもできます
  3. キューを検査するタイマーを用意します。何もない場合は、戻ります
  4. 保留中のオブジェクトがキューにある場合、返されていない保留中の xhr 操作が既に存在するかどうかを確認します。待機中です。同時に保留中の xhr が多すぎるのは望ましくありません。一部のデバイス (iPad など) はそれをチョークします。
  5. 保留中の xhr 操作がない場合は、最初のポーリング オブジェクトをキューから取り出し、xhrGet します。

この手順の利点は、ポーリング間隔を簡単に調整できること、特定の xhr 操作がタイムアウトしたときに正常に動作すること、およびポーリング リクエストのプライベート化を簡単に実装できることです。

于 2011-03-10T14:22:41.067 に答える