使用Firebase数据库JavaScript在Web应用程序上进行即时聊天

使用Firebase数据库JavaScript在Web应用程序上进行即时聊天,javascript,jquery,firebase,web,Javascript,Jquery,Firebase,Web,在我的网站上,我正在使用Firebase数据库创建一个即时消息服务。我已经使聊天功能正常工作,因此用户可以向聊天室发送消息,该消息将显示在显示框中 我遇到的问题是,当创建新聊天时,用户开始对话时,消息会按对话顺序显示,如下所示: 但是当刷新页面并从数据库中提取消息时,将显示如下所示 我的聊天数据库结构如下: 我的聊天代码是: firebase.auth().onAuthStateChanged(函数(用户){ 如果(用户){ //用户已登录。 var db=firebase.databa

在我的网站上,我正在使用Firebase数据库创建一个即时消息服务。我已经使聊天功能正常工作,因此用户可以向聊天室发送消息,该消息将显示在显示框中

我遇到的问题是,当创建新聊天时,用户开始对话时,消息会按对话顺序显示,如下所示:

但是当刷新页面并从数据库中提取消息时,将显示如下所示

我的聊天数据库结构如下:

我的聊天代码是:

firebase.auth().onAuthStateChanged(函数(用户){
如果(用户){
//用户已登录。
var db=firebase.database();
var currentProperty=localStorage.getItem(“prop”);
db.ref('addresses/'+currentProperty+'/chat/group')。在(“添加的子项”中,函数(数据){
//设置局部变量
var message=data.child(“message”).val();
var date=data.child(“日期”).val();
var sender=data.child(“uid”).val();
var time=data.child(“time”).val();
世界卫生组织;
var getCurrentDate=新日期;
day=getCurrentDate.getDate();
月份=getCurrentDate.getMonth()+1;
年份=getCurrentDate.getFullYear();
var newDate=[day,month,year].join('/');
var title=document.getElementById(“chatTitle”);
db.ref('addresses/'+currentProperty+'/firstLine')。一次(“value”,函数(快照){
title.innerHTML=“与参与“+capitalLetter(snapshot.val())的所有人员进行群聊”;
});
if(sender==user.uid){who='boxCurrentUser';}
其他的
{who='boxOther otherUser';}
如果(date==newDate){date='Today'}
db.ref('users/'+sender+'/firstName')。关于('value',函数(数据){
var name=data.val();
如果(谁=='BoxCurrentUser'){

var messageD=“+time+”,“+date+”+“+name+”我建议更改您存储消息时间戳的方式。我会将它们存储为firebase时间戳,如下所示:

然后,当您拉取它们时,您希望使用
orderByChild
,然后使用
startAt
从此处找到的检索数据信息:


然后,这将根据消息的时间戳而不是密钥对消息进行排序。

感谢您的快速响应。我已成功地将每条消息的时间戳存储在我的数据库中,当您说使用startAt从数据库中提取数据时,我将从什么值开始?请看这里:除非您特别从cer开始当然,我不会使用startAt,因为它会自动进行升序。我已经将查询改为“db.ref('addresses/'+currentProperty+'/chat/group')。orderByChild('timeStamp')。startAt()。on('child_added',function(data){”,但它仍然不会按升序按时间戳对消息排序。