Обновление Jquery создает нежелательный бесконечный цикл

#jquery #infinite-loop

#jquery #бесконечный цикл

Вопрос:

У меня есть список друзей, который настроен на обновление. После каждого обновления is затем начинает добавлять одни и те же имена в список вместо простого обновления функции. Любые идеи были бы замечательными или, может быть, я просто пропустил что-то завершенное?

 $(function() {

$('<div />').html('<div id="buddies" class="buddies" style="vertical-align:bottom"><div class="imheader">amp;nbsp;Online Favorites<span class="fr"><a href="#" id="exitlist">X</a></span></div><div class="imheader2"><div class="imheaderspan"><a href="#">Options</a></div></div><ul class="imwindow"><div id="myonlinefavs"></div></ul></div><div id="chatbar" class="chatbar"><div id="ims"></div><div class="buddylist" id="buddylist"><center><a href="#" id="im-menu" class="im-menu">Favorites (<strong id="friendsonline">0</strong>)</a></center></div></div>').appendTo('body');

var imRoot = $("#im-menu");
var buddies = $("#buddies");
imRoot.click(function(){
buddies.toggle();
imRoot.blur();
return( false );
});
$("#exitlist").click(function(){
buddies.toggle();
imRoot.blur();
return( false );
});
$(document).click(function( event ){
if (buddies.is( ":visible" ) amp;amp; !$( event.target ).closest( "#buddies" ).size()){
buddies.hide();
}
});
$(function FL(){
$.ajax({
    type: 'POST',
    url: 'config/receive_buddylist.php',
    cache: 'false',
    dataType: 'json',
    success: function(data){    
        onlineNumber = buddylistreceived = 0;
        data amp;amp; $.each(data, function(i, e){
            if (i == "buddylist") {
                buddylistreceived = 1;
                totalFriendsNumber = onlineNumber = 0;
                $.each(e, function (l, f) {
                    if(f.id != null){
                        longname = f.n.length > 16 ? f.n.substr(0, 16)   "..." : f.n;
                        $('#myonlinefavs').append('<li>'   longname   '</li>');
                    }
                    if(f.s == '0') onlineNumber  ;
                    totalFriendsNumber  ;                           
                });
            }
        });
        R = onlineNumber;
        if (R > 0){
            $('#friendsonline').html(onlineNumber);
        } else {
            $('#myonlinefavs').html('No favorites online.');
            $('#friendsonline').html('0');
        }
    }
});
Z = setTimeout(function () {
    FL()
}, 1000)

});


});
  

Комментарии:

1. Почему вы используете post вместо just $.getJSON() ?

2. Насколько я понимаю $.getJSON , это просто более короткий способ сделать post

3. Вы не отправляете никаких данных, поэтому GET было бы более уместно, чем POST , и да, $.getJSON это более короткий способ сделать то, что вы делаете, поэтому ему интересно, почему вы используете более сложный способ.

4. О, хорошо, я действительно никогда не читал об этом. Работаю с jquery всего чуть больше месяца, но сейчас я переключил его на $.getJSON , который действительно экономит на кодировании.

Ответ №1:

Перед вашей $.each функцией, которая добавляет элементы списка к myonlinefavs элементу, вы должны очистить список, вот так: $('#myonlinefavs').html("") .

Комментарии:

1. .empty() также будет работать, и смысл кода становится еще яснее.

2. @Мэтт Круто! Я не знал об этой функции. Я обязательно буду использовать это в будущем.