首页 > 解决方案 > 按键访问 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(message["content"]); 控制台.log(消息[内容]);

还有一些其他疯狂的东西,但最后,我没有让控制台输出值。我唯一能到达的地方是 Cannot read property 'content' of undefined

我究竟做错了什么?这不像我第一次尝试访问 JS 对象中的某些内容,但似乎我完全迷失了这个对象。

标签: javascriptjquery

解决方案


我认为问题在于您试图从超出范围的元素(messagesParsed.length)开始。尝试使用以下 - 它在 jsbin 上对我有用,并提供了您的测试数据

for(var i = messagesParsed.length - 1 ; i>=0; i--){
                    message = messagesParsed[i]
                    console.log(message.content)
                  }

推荐阅读