【发布时间】:2012-08-23 19:09:02
【问题描述】:
我在递归中使用 setTimeouts 来模拟 setInterval,同时防止它自行运行,例如:
this.poll = function() {
var self = this;
if(self.timeout) {
clearTimeout(self.timeout)
}
self.timeout = setTimeout(function(){
self.request();
}, 1000);
}
self.request(); 包含 ajax 逻辑并调用 this.poll()。
问题是当this.poll 再次被调用时,它似乎并没有真正清除超时,我最终得到了大量的请求。
有没有更好的方法来处理这个问题?
谢谢!
【问题讨论】:
-
self.request(); contains ajax logic and calls this.poll()--request是立即调用poll,还是在其 Ajax 回调中?如果它立即执行,那么我希望您最终会收到大量请求,因为request正在产生一个新的 Ajax 请求,然后立即排队一个新的请求以在下一秒运行,可能在旧请求之前已解决。 (除非您的意图实际上是每秒轮询一次。) -
request在 ajax 回调中调用poll,目的是每秒运行一次。但是现在,如果我刷新页面几次,我会在开始时收到一堆请求。 -
如果刷新页面,它会终止超时,清除 JavaScript。您看到的是上一页加载的旧请求。
-
啊啊啊啊,抱歉,我在投票中接到了另一个请求。
标签: javascript ajax settimeout