1

我有一个页面,我想每隔几秒钟就不停地更新。

为此,我写了以下内容:

var to;
$(function () {
           to = setTimeout(updateDivContent, 2000);
});

function updateDivContent() {

    $('#topbox').load('/home/blabla', null);


    $('#leftgraph').load('/home/blabla', null, function () {

        to = setTimeout(updateDivContent, 2000);
    });
};

这有效,但是,它导致我认为是内存泄漏,因为大约 15 分钟后,计算机几乎冻结,浏览器占用了所有可用的内存和 CPU。

我猜超时基本上是堆叠,但是,我不知道如何解决这个问题。我已经尝试摆脱第二个超时并将第一个超时放入while(true)循环中,但是,我就是无法让它工作。

任何人都可以提出任何建议吗?

4

5 回答 5

9

这实际上看起来不错。但是,如果第一个 Ajax 调用没有在两秒内完成,它将堆叠,这可能(不确定)会导致问题。

超时本身不会叠加,因为您只有在前一个完成后才启动一个新的。

两个Ajax 请求完成后,尝试启动新的超时:

$.when($('#topbox').load('/home/blabla'),
       $('#leftgraph').load('/home/blabla')
).then(function () {
    setTimeout(updateDivContent, 2000);
});

参考: $.when

于 2012-06-15T11:29:15.263 回答
1

我认为最好使用setInterval而不是setTimeOut.

看到这个帖子

于 2012-06-15T11:27:37.730 回答
0

您可能想调用clearTimeout以使先前的计时器无效,如下所示:

clearTimeout(to);
to = setTimeout(updateDivContent, 2000);
于 2012-06-15T11:27:40.523 回答
0

你能这样吗,它会每 2 秒调用一次

to = setInterval("updateDivContent", 2000);


function updateDivContent() {

$('#topbox').load('/home/blabla', null);


$('#leftgraph').load('/home/blabla', null, function () {

    //to = setTimeout(updateDivContent, 2000); 
});
};
于 2012-06-15T11:28:52.610 回答
0

尝试setInterval

var to;

$(function () {
    to = setInterval(updateDivContent, 2000);
});

function updateDivContent() {
    $('#topbox').load('/home/blabla', null);
    $('#leftgraph').load('/home/blabla')
};
于 2012-06-15T11:29:05.903 回答