jQuery get / AJAX повторный запрос отдает ответ удваивается каждый раз - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть этот простой скрипт, который продолжает дразнить меня:

var latest;

function populate(){
    $.get('lib/log.php?action=update&latest='+latest, function(data) {
        if(data.id!=latest){
            latest = data.id;
            $(data.news).hide().prependTo('#tabul').slideDown("slow");
        }
    },"json")
    setInterval(populate,5000);
   };

populate();

- Каждый раз, когда запрос запускается, он извлекает одну строку html, но продолжает добавлять его к предыдущему ответу, поэтому он отправляет 1 строку, 2 строки, 4 строки, 8, 16 и т. Д. В браузер (и пропускную способность ) сходит с ума ...

Почему это? Чего мне не хватает, и как мне сделать так, чтобы он добавлял только одну строку.

Заранее спасибо

Andreas

Ответы [ 4 ]

0 голосов
/ 14 сентября 2011

Может быть, я что-то неправильно читаю ... но у вас есть функция Populate, добавляющая еще один setInterval при каждом запуске. Таким образом, он будет выполняться еще один раз за интервал каждый раз, когда он выполняется.

0 голосов
/ 14 сентября 2011

SetInterval запускается даже после того, как ответ AJAX может не завершиться через эти 5 секунд. Могу ли я порекомендовать вам использовать setTimeout после того, как вы сделали слайдВниз вашего нового контента?

function populate(){
    $.get('lib/log.php?action=update&latest='+latest, function(data) {
        if(data.id!=latest){
            latest = data.id;
            $(data.news).hide().prependTo('#tabul').slideDown("slow");
        }

        setTimeout(populate,5000);
    },"json")
};

populate();
0 голосов
/ 14 сентября 2011

Измените setInterval с помощью функции setTimeout.

Проверьте этот поток переполнения стека для понимания различия между этими двумя.

0 голосов
/ 14 сентября 2011

Вы должны использовать setTimeout вместо setInterval.

...