我在Web服务器上托管了一个很长的进程。只需用户点击按钮,即可从网页触发该事物。一些Javascript定期通过Ajax进行轮询,以检查操作是否已完成服务器端。为此,我使用setInterval
,稍后使用clearInterval
停止投票。
如果这花费的时间太长(例如服务器已经崩溃),我希望通过某种超时来通知客户端。我做了一些研究,发现了setTimeout
。问题是,如果操作在超时之前成功完成,我想取消这个。
PS:我特别针对 IE7 / IE8 ,但总是对某些 JQuery
开放答案 0 :(得分:7)
只要将间隔的id存储在变量中,就可以随时使用它来清除间隔。
var interval = window.setInterval(yourFunction, 10000);
...elsewhere...
window.clearTimeout(interval);
有关详细信息,请参阅Mozilla Documentation's setInterval example。
组合一个包含modified version of Mozilla's Example的快速JS小提琴。
答案 1 :(得分:4)
要清除setTimeout,请使用clearTimeout。
答案 2 :(得分:0)
你想要两个计时器(如你所说)
如果轮询成功,您希望清除轮询间隔并取消故障计时器。如果到期计时器触发,则要清除轮询间隔
var checkCount = 0;
function checkComplete() {
console.log("test " + checkCount);
if (checkCount++ > 10) {
console.log("clearing timeout");
window.clearInterval(pollInterval);
window.clearTimeout(expireTimer);
}
}
function cancelPolling(timer) {
console.log("clearing poll interval");
window.clearInterval(pollInterval);
}
var pollInterval = window.setInterval(checkComplete, 500);
var expireTimer = window.setTimeout(cancelPolling, 10000);
你可以摆弄checkCount
常量“10” - 保持低位以模拟轮询成功,将其提高到达到checkCount之前发生的超时,模拟轮询失败。