Javascript JS:setInterval和blur

Javascript JS:setInterval和blur,javascript,Javascript,我有这个: $(window).blur(function() { setInterval(function() { $.ajax({ type: "POST", url: "imback.php", data: { mode: 'ajax', getUpdates: 'auto', },

我有这个:

$(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调用

我怎样才能解决这个问题?
})

看起来需要在焦点上清除间隔()

设置间隔时需要存储间隔,然后在窗口焦点上清除间隔。像这样:

(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”变量,本质上使其成为窗口模糊和焦点处理程序的“私有”变量。

使用闭包:

$(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); });
});
这允许您在清除间隔之前不必检查是否已设置间隔。而且,它允许您确保清除正确的间隔,而不是希望没有其他调用覆盖您的变量