【发布时间】:2010-03-16 15:54:40
【问题描述】:
我正在使用 dojo.xhrPost 发送 Ajax 请求
调用由function sendRequest() 包裹
我现在必须连续(每 3 秒)将相同的 ajax Post 发送到服务器
如何使用 Dojo 实现服务器轮询?我基本上需要每 3 秒拨打一次sendRequest()
【问题讨论】:
标签: javascript ajax dojo polling
我正在使用 dojo.xhrPost 发送 Ajax 请求
调用由function sendRequest() 包裹
我现在必须连续(每 3 秒)将相同的 ajax Post 发送到服务器
如何使用 Dojo 实现服务器轮询?我基本上需要每 3 秒拨打一次sendRequest()
【问题讨论】:
标签: javascript ajax dojo polling
我不相信 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 操作超时时可以正常工作,并且可以轻松实现轮询请求的私有化。
【讨论】:
要不断更新您的网格,您可以将您的 ajax 请求包含在网格的“刷新完成”回调函数中。
yourGrid.on('dgrid-refresh-complete', function(event) {
//Ajax request fireing every 3 sec
}
【讨论】: