setInterval无法正常工作

时间:2012-03-15 00:05:06

标签: php jquery json setinterval

我今晚一直在网上搜索,看到了很多“解决方案”,但不幸的是没有为我工作。所以我会尝试在堆栈和其他地方得到我在这里看到的不同的答案,并希望我找到一个可以工作的...

我的页面有以下javascript位:

logbook = setInterval(function () {
    $.getJSON("php/log.php", function(data) {
        $.each(data.posts, function(i,data) {
            $('#logspan').replaceWith(data.logupdate);
        });
    });
}, 5000);

当我运行该页面时,它可以工作,但只有一次然后它会完全停止间隔(这是在Chrome和Firefox中)并且基本上放弃了。

这很奇怪,因为还有另一个脚本运行如下,并且完美地完成了它的工作:

var timer;
function startCount() {
    timer = setInterval(count,1000);
}
function count() {
    var el          = document.getElementById('counter');
    var currentNumber   = parseFloat(el.innerHTML);
    el.innerHTML        = currentNumber+1;
}

我已经尝试过看第一个脚本是否有效,如果我关闭第二个脚本,但它仍然没有去。那么,我怎样才能使第一个(JSON)脚本工作?由于这个问题,它已经过了我的睡觉时间,我还没有更进一步! 拉头发

任何建议/提示/提示都表示赞赏......

编辑:好的,我找到了一些奇特的东西,当我更换“replaceWith”并使用“appendTo”时,似乎更新#logspan就好了,但显然我不想垃圾邮件我自己的网页。也许问题出在其他地方?

2 个答案:

答案 0 :(得分:2)

同意。

  1. 使用与$ .each()函数体中的数据不同的变量名,因为您可能无意中引用了$ .getJSON()函数体中的数据
  2. 由于您正在迭代JSON调用中返回的帖子,因此只清空#logspan的主体一次,然后将每个帖子的内容按顺序附加到#logspan。

    var logbookTimer = setInterval(function () {  
        $.getJSON("php/log.php", function(data) {  
            // Empty out the body of the log
            $('#logspan').empty();
            // Add some content for each retrieved post
            $.each(data.posts, function(i,d) {  
               $('<div>').html(d.logupdate).appendTo($('#logspan'));  
            });  
        });  
    },5000);
    

答案 1 :(得分:-1)

试试这种方式

var logbook = function () {
    $.getJSON("php/log.php", function(data) {
        $.each(data.posts, function(i,data) {
            $('#logspan').replaceWith(data.logupdate);
        });
    });
};

setInterval(logbook, 1000);