取消Javascript超时

Cancel Javascript timeout

本文关键字:超时 Javascript 取消      更新时间:2023-09-26

我有一个长进程托管在Web服务器上。这个东西是由一个Web页面触发的,在用户点击一个按钮时。一些Javascript通过Ajax定期轮询,检查操作是否已在服务器端完成。为此,我使用setInterval,然后使用clearInterval来停止轮询。

如果这需要太长时间(例如服务器崩溃),我希望客户端通过某种超时来通知。我做了一些研究,发现了setTimeout。问题是,如果操作在超时前成功完成,我想取消这个操作。

    你会建议一个不同的方法吗?
PS:我的目标是IE7/IE8,但总是开放一些JQuery

只要你将interval的id存储在一个变量中,你就可以在任何时候使用它来清除interval。

var interval = window.setInterval(yourFunction, 10000);
...elsewhere...
window.clearTimeout(interval);

有关更多信息,请参阅Mozilla文档中的setInterval示例。

创建一个包含Mozilla示例修改版本的快速JS Fiddle。

清除setTimeout,使用clearTimeout

您需要两个计时器(如您所说)

  1. 执行下一次轮询的重复间隔和
  2. 如果服务器没有响应,一次性过期放弃

如果轮询成功,则清除轮询间隔并取消失败定时器。如果过期计时器触发,您希望清除轮询间隔

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到达之前超时,模拟轮询失败。