按键访问JS对象的值



我现在真的很怀疑自己的想法,很困惑。

我正在构建一个小聊天应用程序,只是为了体验一些东西。。。

为此,我有一个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或更好地用于每个循环

最新更新