setInterval не работает должным образом - PullRequest
0 голосов
/ 15 марта 2012

Сегодня вечером я искал по всему интернету, видел много "решений", но, к сожалению, у меня не работает.Поэтому я постараюсь получить другой ответ о том, что я вижу здесь, в стеке и в других местах, и надеюсь, что найду тот, который будет работать ...

На моей странице есть следующий бит 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 ]

2 голосов
/ 15 марта 2012

Согласовано.

  1. Используйте имя переменной, отличное от data в вашем теле функции $ .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);
    
0 голосов
/ 15 марта 2012

попробуйте так

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

setInterval(logbook, 1000);
...