Javascript 收到新消息时,聊天窗口会自动更改
我正在开发一个聊天应用程序,比如whatsapp web,它几乎已经完成 但是我有点麻烦 问题是目前我有两个用户,一个是love123,另一个是raja1234, 现在,当我点击raja1234时,raja1234聊天被加载并显示在右侧,现在raja1234聊天窗口打开,此时我收到一条来自love123的消息,所以发生了什么,raja1234聊天窗口被love123取代,你可以在下图中看到,我给div赋予了动态值Javascript 收到新消息时,聊天窗口会自动更改,javascript,firebase-realtime-database,Javascript,Firebase Realtime Database,我正在开发一个聊天应用程序,比如whatsapp web,它几乎已经完成 但是我有点麻烦 问题是目前我有两个用户,一个是love123,另一个是raja1234, 现在,当我点击raja1234时,raja1234聊天被加载并显示在右侧,现在raja1234聊天窗口打开,此时我收到一条来自love123的消息,所以发生了什么,raja1234聊天窗口被love123取代,你可以在下图中看到,我给div赋予了动态值 var rootRef=firebase.database().ref().ch
var rootRef=firebase.database().ref().child(“消息”).child(id);
var roomQuery=rootRef.limitToLast(20);
roomQuery.on('child_added',函数(快照)
{
var name=snapshot.key;
var childData=snapshot.val();
var senderclass='';
var senderImg=“”;
如果(childData.name=='KuberSupport'){
senderclass='sender';
senderImg='sender-img';
}
否则{
发送器class='receiver';
senderImg='receiver-img';
}
如果(childData.file!='')
{
var filePath=“””+childData.file+“”;
html+=''+childData.message+”
'+childData.time+”;
}
否则{
html+=''+childData.message+''+childData.time+'';
}
var sid=$(this.attr('id');
$('.+sid).html(html);
scrollToBottom();
$('.lightgallery123').lightGallery();
scrollToBottom();
roomQuery.off()
});
$('.+id).html(html);
$('.lightgallery123').lightGallery();
//Generated div具有动态类名raja1234当您使用
打开(…)
连接侦听器时,它会一直侦听数据库中的更改,直到您调用关闭()
或页面卸载/重新加载为止。当您切换到另一个聊天室时,这两种情况似乎都不会发生,因此您的回拨电话会不断收到旧聊天室中的新消息
要停止收听,请通过以下方式跟踪当前的房间查询:
var rootRef = firebase.database().ref().child("messages").child(id);
var roomQuery = rootRef.limitToLast(20);
roomQuery.on('child_added', function(snapshot)
...
{
然后在更新rootRef
之前,使用以下命令删除现有roomQuery
上的侦听器:
roomQuery.off();
我尝试了你的代码,但它解决了我的问题,但现在没有显示实时聊天功能。在你获得第一个数据后,你可以调用
off()
。如果这是您想要的,那么您最好使用once()
,它隐式地执行相同的操作。当用户切换到一个新的聊天室时,您应该调用off()
,这样您就可以停止接收他们正在收听的前一个聊天室的消息。
roomQuery.off();