【问题标题】:Switching SetInterval to SetTimeout将 SetInterval 切换为 SetTimeout
【发布时间】:2017-04-28 15:17:03
【问题描述】:

我目前正在使用 SetInterval 函数和 Ajax 调用来每 30 秒重新加载一次局部视图,如下所示:

$(document).ready(function () {

    //reload new jobs every 30 sec
    setInterval(function () {
        //only reload the sections between certain times
        var date = new Date();
        var hour = date.getHours();

        if (hour >= 7 && hour <= 21) {
            ReloadNew();
        }
    }, 30000);

    function ReloadNew() {
        $.ajax({
            url: "@Url.Action("NewFaults","Fault")",
            type: 'GET',
            dataType: 'html',
            cache: false,
            success: function (html) {
                $('#NewFaults').html(html);
            }
        });
    }
});

但是我一直遇到内存泄漏问题,经过一番研究,我发现不建议将 SetInterval 与 Ajax 一起使用,因为它们会在窗口失焦时堆叠,然后在重新进入时立即运行重点。建议改用 SetTimeout。

但是,据我所知,有多种方法可以通过 Ajax 调用来实现 SetTimeout,所以我想知道是否有人可以帮助我调整上面的内容以使用 SetTimeout。

谢谢

【问题讨论】:

  • SetTimeout 只运行一次,而不是每个时间段。

标签: jquery ajax memory-leaks settimeout setinterval


【解决方案1】:

你可以试试这个,但我怀疑你的泄漏可能来自$('#NewFaults').html(html);。

$(document).ready(function () {

    function ConsiderReload() {
        //only reload the sections between certain times
        var date = new Date();
        var hour = date.getHours();

        if (hour >= 7 && hour <= 21) {
            ReloadNew();
        }

        setTimeout(ConsiderReload, 30000);
    }

    function ReloadNew() {
        $.ajax({
            url: "@Url.Action("NewFaults","Fault")",
            type: 'GET',
            dataType: 'html',
            cache: false,
            success: function (html) {
                $('#NewFaults').html(html);
            }
        });
    }

    ConsiderReload();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 2021-10-02
    • 2012-06-16
    • 1970-01-01
    相关资源
    最近更新 更多