javascript:setTimeout和clearTimeout问题

时间:2015-05-28 11:53:24

标签: javascript jquery ajax

我正在尝试通过AJAX进行轮询,并希望在AJAX调用成功后清除超时。问题是超时从不清除,新的AJAX请求继续被解雇。

我在SO上查找了类似的问题,但他们都认为问题是一个本地范围的变量。但是,我在我的函数之外声明了poll_xhr变量。

<script>
var poll_xhr = null;
(function poll() {
    poll_xhr = setTimeout(function () {
     $.ajax({
            type: 'POST',
            dataType: 'json',
            url: 'check-status/',
            success: function (data) {
                console.log(data);
                if(data === 'OK') {
                    clearTimeout(poll_xhr);
                    window.location.href = '../'
                }
            },
            complete: poll
        });
    }, 3000);
})();
</script>

2 个答案:

答案 0 :(得分:7)

这就是您的代码所做的事情:

  1. 开始暂停
  2. 超时到期时:发送HTTP请求
  3. 当HTTP响应到达时:清除超时(为时已晚,已经触发)并调用poll启动一个新超时。
  4. 如果您想提出其他请求,请移除complete: poll并将poll()置于if语句(您当前拥有clearTimeout)中。

答案 1 :(得分:-1)

为了检查,在数据中加入一些警报==='确定'。如果没有表示,则存在数据类型不匹配。要解决此问题,请尝试使用data =='确定'。