我有一个看起来像这样的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()不是函数并继续循环。
有什么想法吗?
答案 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();