将SetInterval切换为SetTimeout

时间:2017-04-28 15:17:04

标签: jquery ajax memory-leaks settimeout setinterval

我目前正在使用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。

由于

1 个答案:

答案 0 :(得分:0)

你可以试试这个,但我怀疑你的泄密可能来自$(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(); });

{{1}}