取消Javascript超时

取消Javascript超时,javascript,Javascript,我在Web服务器上有一个很长的进程。这个东西是由一个用户点击一个按钮从一个网页上触发的。一些Javascript定期通过Ajax进行轮询,以检查操作是否已完成服务器端。为此,我使用setInterval,然后使用clearInterval停止轮询 如果这花费的时间太长(例如服务器崩溃),我希望客户端收到某种超时通知。我做了一些研究,发现了setTimeout。问题是,如果操作在超时之前成功完成,我想取消这个操作 如何做到这一点 你会建议一种不同的方法吗 PS:我特别针对的是IE7/IE8,但总是

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

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

  • 如何做到这一点
  • 你会建议一种不同的方法吗

  • PS:我特别针对的是IE7/IE8,但总是对一些JQuery

    开放,只要将间隔id存储在变量中,就可以随时使用它清除间隔

    var interval = window.setInterval(yourFunction, 10000);
    
    ...elsewhere...
    
    window.clearTimeout(interval);
    
    有关更多信息,请参阅


    组合一个包含.

    的快速JS提琴来清除设置超时,使用.

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

  • 重复间隔以进行下一次轮询,然后
  • 如果服务器从未响应,则一次性过期放弃
  • 如果轮询成功,您希望清除轮询间隔并取消故障计时器。如果过期计时器触发,您希望清除轮询间隔

    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之前发生超时,模拟轮询失败