杀死重复的AJAX请求

时间:2016-04-14 16:15:49

标签: jquery ajax

我有一个看起来像这样的AJAX请求:

var statistics = "link-to-a-JSONP";

function team_stats(json) {
   alert(json);
}

(function stats() {
        $.ajax({
            type: 'GET',
            url: statistics + '?callback=jsonp',
            crossDomain: true,
            dataType: 'jsonp',
            jsonpCallback: 'team_stats',
            jsonp: 'callback',
            data: {},
            success: function(data) {
              var test += '<div>' + data + '</div>';
              $(".content").append(test);

              /* a close button that closes the tab and kills the request */
              $("#closeStats").on("click", function() {
                    stats.abort();
                });
            },
            complete: function() {
              setTimeout(stats, 15000);
            }
       });
})();

这很好用,请求每15秒重复一次。现在,我想在单击某个按钮时终止请求(如图所示)。编译器说片段stats.abort()不是函数并继续循环。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您正在调用函数中止。函数没有中止。

你想要杀死setTimeout。所以你需要持有对计时器的引用。

(function () {
    var timer;
    function foo () {
        console.log(new Date());
        timer = window.setTimeout(foo,1000);  //<-- store a reference to the timeout
    }

    function killTimer() {
        if (timer) window.clearTimeout(timer);
    }

}());

如果您还要中止活动的Ajax请求,您还需要保留对它的引用。

xhr = $.ajax(...);
...
xhr.abort();