我有这个:
$(window).blur(function() {
setInterval(function() {
$.ajax({
type: "POST",
url: "imback.php",
data: {
mode: 'ajax',
getUpdates: 'auto',
},
success: function(msg){
document.title = msg + titleOrig;
}
});
}, 35000);
工作正常。
虽然,如果你已经模糊,然后当你回头时,它将继续进行ajax调用,它不会在间隔35秒后停止发送ajax调用。
我该如何解决这个问题? })
答案 0 :(得分:2)
您需要在设置时存储间隔,然后在窗口焦点上清除它。像这样:
(function() {
var interval = null;
$(window).blur(function() {
if (interval) clearInterval(interval);
interval = setInterval(function() {
$.ajax({
type: "POST",
url: "imback.php",
data: {
mode: 'ajax',
getUpdates: 'auto',
},
success: function(msg){
document.title = msg + titleOrig;
}
});
}, 35000);
});
$(window).focus(function() {
if (interval) clearInterval(interval);
interval = null;
});
})();
编辑:我在代码周围添加了(function() { ... })()
来封装“interval”变量,实际上使它对窗口模糊和焦点处理程序“私有”。
答案 1 :(得分:0)
看起来你需要在焦点上使用clearInterval()
答案 2 :(得分:0)
使用闭包:
$(window).blur(function() {
tracktime = new Date();
var iVal = setInterval(function() {
$.ajax({
type: "POST",
url: "imback.php",
data: {
mode: 'ajax',
getUpdates: 'auto',
},
success: function(msg){
document.title = msg + titleOrig;
}
});
}, 2000);
$(window).focus(function() { clearInterval(iVal); });
});
这使您无需在清除之前检查是否已设置间隔。并且,它可以让您确保清除正确的Interval,而不是希望没有其他调用覆盖您的变量。