You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用showDataset时报Cannot read properties of undefined (reading 'Messages')错误如何解决

问题原因&修复方案

1. 页面加载逻辑顺序错误

你的<body>标签绑定了onload="showDataset()",页面加载完成就直接执行这个函数,但此时你从来没有调用过loadJSON()发起JSON请求,全局变量Quotes还是初始的undefined状态,自然读取Quotes.Messages就会抛出你遇到的类型错误。
修复:把body的onload事件改成调用loadJSON(),请求成功后HandleData里已经会调用showDataset()了,不需要onload直接调。

<!-- 修改前 -->
<body id="page" onload="showDataset()">
<!-- 修改后 -->
<body id="page" onload="loadJSON()">

2. Quotes.json格式不符合标准JSON规范

你提供的JSON存在多处语法错误:

  • 整个JSON对象外层缺少大括号包裹
  • 键名Messages没有加双引号(JSON要求所有字符串键必须用双引号)
  • 数组第二个元素末尾缺少逗号分隔
    修复后的正确JSON内容:
{
  "Messages": [
    {"Time": "1", "Note": "2", "Username": "3"},
    {"Time": "11", "Note": "21", "Username": "31"},
    {"Time": "12", "Note": "22", "Username": "32"}
  ]
}

3. 代码字段对应错误

你JSON里存储时间的键是Time,但showDataset函数里读的是Quotes.Messages[x].datetime,字段名不匹配会读不到值。同时你已经用createElement创建了p元素,不需要再在innerHTML里套冗余的<p>标签。
修复:

// 修改前
p.innerHTML = "<p>"+ Quotes.Messages[x].datetime + " : "+ Quotes.Messages[x].Note + " By : " + Quotes.Messages[x].Username + "</p>";
// 修改后
p.innerHTML = Quotes.Messages[x].Time + " : "+ Quotes.Messages[x].Note + " By : " + Quotes.Messages[x].Username;

4. 不建议用eval解析JSON

eval会执行传入的任意代码,有安全风险,替换成标准的JSON.parse即可:

// 修改前
Quotes = eval('(' + xmlhttp.responseText + ')');
// 修改后
Quotes = JSON.parse(xmlhttp.responseText);

内容的提问来源于stack exchange,提问作者Jae_JPN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:54:10