2017-06-25 2 views
0

Ich baue ein Chat-System wie Facebook. Ich möchte nur Daten, die mit einem bestimmten Benutzer verknüpft sind, in die angezeigte Benutzerbox laden. Genau wie bei Facebook erscheint eine Chat-Box, wenn jemand auf den Namen des Benutzers in der Benutzerliste in der Seitenleiste klickt (Ich hoffe, dass es Sinn macht). Alles funktioniert gut, aber wenn ich versuche, Daten zu holen, "wiederholen" sich die Daten. Hier sind meine Codes zum Öffnen der Chatbox und zum Abrufen der Daten.Stop ajax vom Refetching Daten

$('li.user').click(function(){ 
    id = $(this).data('id'); 
    _status = $(this).data('status'); 
    username = $(this).data('username'); 
    _return = false; 
    $('.chat .chat-boxes .box').each(function(){ 
     if($(this).data('id') == id){ 
     $(this).find('.box-footer .textarea').focus(); 
     _return = true; 
    } 
    }); 
    if (_return){ 
    return 
    }; 
    $('.chat').find('.chat-boxes').append(box.format(id,_status,username)); 
    $('.box').each(function(){ 
     _boxBody = $(this).find('.box-body'); 
     _messagesBox = $(this).find('.messages'); 
     _id = $(this).data('id'); 
     _messagesBox.append('This is Box #'+_id); 
     $.ajax({ 
      type: 'POST', 
      url: base+'chat/getMessages.php', 
      data: {'user2' : _id}, 
      cache: false, 
      dataType: 'json', 
      beforeSend: function(){$('.box-body-top').html('Loading...')}, 
      success: function(res){ 
       if(res.success){ 

       } 
       else if(res.fail){ 

       } 
      } 
     }); 
    }); 
}); 
+0

Was meinst du mit 'Wiederholen'? Es ist ein bisschen kritisch. –

+0

Zum Beispiel die Zeile _messagesBox.append ('Dies ist Box #' + _ id); Wenn ich einmal auf den Benutzer klicke, fügt er hinzu, sagen wir Dies ist Box # 12 Wenn ich auf einen anderen Benutzer klicke, fügt er 'This is Box # 12This is Box # 12' (zweimal) an. Und der Zyklus geht weiter –

Antwort

0

Dies könnte verursacht werden, weil Sie Ihre Ajax-Anfrage innerhalb einer Schleife verpackt haben.

Wenn mehr als ein Element mit Box-Klasse angefügt vorhanden ist, ist dies die Menge der Anforderungen, die Sie erwarten können. Eine einfache Möglichkeit, es auszuprobieren, wäre in den Entwicklertools auf der Registerkarte "Netzwerk", um zu sehen, wie viele Anfragen gestellt wurden.

Sie sollten auch in Betracht ziehen, Sockets für Chat-System wie folgt zu verwenden. Sehen Sie sich beispielsweise socket.io an.

+0

ich muss es mit jquery implementieren –

+0

In diesem Fall folgen Sie, was ich außer dem letzten Absatz gesagt habe. Sie haben definitiv mehr als ein .box-Element, und Ihr Code wiederholt sich jedes Mal beim Klicken. Beachten Sie, dass es über das gesamte Dokument und nicht nur über das ausgewählte DOM aus dem click -Ereignis iteriert. – Adriani6

+0

Immer noch nicht die gewünschten Ergebnisse –

Verwandte Themen