我现在真的很怀疑自己的想法,很困惑。
我正在构建一个小聊天应用程序,只是为了体验一些东西。。。
为此,我有一个MySQL数据库,其中有一个表,只存储带有ID、消息内容、用户ID和时间戳的消息。
在显示聊天的页面上,我向后端发出ajax请求,后端返回数据库中的数据,如下所示:
$messages = $db->exec('SELECT * FROM message ORDER BY ID DESC LIMIT 50');
echo json_encode($messages);
因此,我从中得到的是最后50条用JSON编码的消息。
在页面上,我收到并解析它们:
messagesParsed = JSON.parse(messages);
现在,我在这个变量中得到的是这个(缩短了一点(
[
{
"ID": "68",
"content": "oi",
"uid": "4",
"time": "2021-07-16 13:29:42"
},
{
"ID": "67",
"content": "io",
"uid": "4",
"time": "2021-07-16 13:29:42"
},
{
"ID": "66",
"content": "oibioboib",
"uid": "4",
"time": "2021-07-16 13:29:42"
},
{
"ID": "65",
"content": "iob",
"uid": "4",
"time": "2021-07-16 13:29:41"
},
{
"ID": "64",
"content": "b",
"uid": "4",
"time": "2021-07-16 13:29:41"
},
{
"ID": "63",
"content": "boi",
"uid": "4",
"time": "2021-07-16 13:29:41"
},
{
"ID": "62",
"content": "oibio",
"uid": "4",
"time": "2021-07-16 13:29:41"
}
]
然后,我反向循环这个数组,目的是在页面的最底部显示最新消息:
for(var i = messagesParsed.length; i>=0; i--){
message = messagesParsed[i];
console.log(message);
}
到目前为止还不错,我现在得到了这个结果(存储在message
变量中(
{
"ID": "32",
"content": "fn",
"uid": "4",
"time": "2021-07-16 13:29:24"
}
奇怪的是:我只想显示聊天消息的内容(一开始(,并尝试了20种不同的获取内容的变体,所以在for循环中,我做了这样的事情:
console.log(message.content(;console.log(消息["content"](;console.log(消息[内容](;
还有其他一些疯狂的东西,但最终,我无法让控制台输出值。我唯一得到的是Cannot read property 'content' of undefined
我做错了什么?这不是我第一次尝试访问JS对象中的东西,但我似乎完全迷失了这一点。
我认为问题是你试图从一个超出范围的元素(messagesParsed.length(开始。试着使用下面的-它在jsbin上对我有效,你的测试数据提供了
for(var i = messagesParsed.length - 1 ; i>=0; i--){
message = messagesParsed[i]
console.log(message.content)
}
嗨,您正在进行额外的迭代当您从等于数组长度的索引开始时
for(var i = messagesParsed.length-1; i>=0; i--){
message = messagesParsed[i];
console.log(message);
}
//Otherwise, you can also use
for(var message of messagesParsed){
console.log(message.content);
}
只需将var i=messagesParsed-length替换为var i=messagesParsed-length-1或更好地用于每个循环