【问题标题】:setInterval stops without any reason when browser tab is background当浏览器选项卡为背景时,setInterval 无故停止
【发布时间】:2012-04-15 20:13:59
【问题描述】:

我正在开发一个应用程序,该应用程序使用 setInterval 使用 AJAX 每 2 分钟将当前时间戳发送到数据库。

但不知何故 setInterval 会在几分钟后停止(我没有计算确切的时间),但我相信当我 20-30 分钟不打开该浏览器的标签时会发生这种情况。

function tmstmp() {
$.post("send_functions.php?act=time");
}

$(function() { 
setInterval(tmstmp, 60000);
});

如果该选项卡不在前台,setInterval 停止正常吗?

如果是,我如何防止 setInterval 停止?或者检查它是否停止了?

谢谢

【问题讨论】:

  • 检查我编辑的答案。如果间隔有效,至少应该给你一个线索。
  • @amnotiam 你不能制作 cmets wiki!!!
  • 顺便说一句,您为什么要将时间戳发送到您的 Web 服务器?我确信您的网络服务器有一种方法可以获取您尝试通过每个 POST 请求发送的确切时间戳数据。
  • @amnotiam。你在Meta LOL 中给了我一个新问题的想法...

标签: javascript ajax setinterval


【解决方案1】:

您应该尝试在页面启动时进行函数调用:

test();

然后循环该函数:

function test() {
    setTimeout(function() {
        // your code
        test();
    }, 2000);
}

【讨论】:

    【解决方案2】:

    这不应该发生。 浏览器确实可以将计时器分辨率降低到 1/s 左右,但不会清除 setInterval。

    您的代码中是否存在导致clearInterval 的错误?

    【讨论】:

    • 不,我在这里添加到代码中时没有错误。当我在谷歌上搜索时,我发现很多人都面临这个问题。
    • 嗯,我从没听说过这个问题。你能引用一些资料吗?
    【解决方案3】:

    没有代码 + 没有调试信息 = 很难判断出了什么问题。

    确保将以下行添加到使用 setInterval 执行的代码(方法)中,并在 20-30 分钟后观察控制台中是否仍有输出。

    console.log('Yep! I am alive!');
    

    编辑: 除了尝试更改 tmstmp 方法以在执行 POST 请求后包含回调函数之外,可以做任何事情。这样你至少会知道它有效。

    function tmstmp() {
        $.post("send_functions.php?act=time", function(data){
            console.log('Yep! I am alive!');
        });
    }
    

    【讨论】:

    • 嗯...如果你有代码,你会花时间调试它吗——这意味着等待几次 20-30 分钟? :)
    • @gdoron 只需在调试时将间隔时间更改为几秒钟。
    • 会试着写在这里谢谢。顺便说一句,我应该使用具有重复功能的 setTimeout 吗?它比 setInterval 更好吗?
    • 一般setTimeout()已被证明比setInterval()可靠得多。
    • @holodoc - 我更喜欢setTimeout() 而不是setInterval() 在许多情况下它们可能都可以工作,但是有60秒的间隔,我不知道一个或多或少可靠的说法是准确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多