Javascript 收到新消息时,聊天窗口会自动更改

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

我正在开发一个聊天应用程序,比如whatsapp web,它几乎已经完成 但是我有点麻烦

问题是目前我有两个用户,一个是love123,另一个是raja1234, 现在,当我点击raja1234时,raja1234聊天被加载并显示在右侧,现在raja1234聊天窗口打开,此时我收到一条来自love123的消息,所以发生了什么,raja1234聊天窗口被love123取代,你可以在下图中看到,我给div赋予了动态值

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();