dojo.xhrPostを使用して Ajax リクエストを送信
していますfunction sendRequest()
サーバーに同じ ajax Post を継続的に (3 秒ごとに) 送信するようになり
ました Dojo でサーバー ポーリングを実装するにはどうすればよいですか? 基本的sendRequest()
に3秒ごとに呼び出す必要があります
dojo.xhrPostを使用して Ajax リクエストを送信
していますfunction sendRequest()
サーバーに同じ ajax Post を継続的に (3 秒ごとに) 送信するようになり
ました Dojo でサーバー ポーリングを実装するにはどうすればよいですか? 基本的sendRequest()
に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);
次のようにする方が良いことがわかりました。
この手順の利点は、ポーリング間隔を簡単に調整できること、特定の xhr 操作がタイムアウトしたときに正常に動作すること、およびポーリング リクエストのプライベート化を簡単に実装できることです。