必须启动本地HTTP服务(如python -m http.server 8000)并用http://localhost访问,不能双击打开HTML;fetch需检查response.ok、用try/catch处理json解析;数据结构须匹配图表库要求,数值和时间字段需类型转换。

直接用 fetch() 读取本地 JSON 文件会失败
浏览器出于安全限制,file:// 协议下发起的 fetch() 请求会被拒绝(CORS 策略不适用,但同源策略仍生效),控制台报错类似:Failed to load resource: net::ERR_FILE_NOT_FOUND 或 net::ERR_FAILED。这不是代码写错了,是协议层面禁止的。
实操建议:
- 必须启动一个本地 HTTP 服务(哪怕最简)——比如用 Python 的
python -m http.server 8000,然后访问http://localhost:8000打开 HTML 文件 - 不要双击打开
index.html,那走的是file://协议 - JSON 文件需与 HTML 同域(即同个服务目录下),例如放在
data/config.json,请求路径写fetch('data/config.json')
fetch() 加载 JSON 的最小可靠写法
别依赖 .then().catch() 捕获所有错误:网络失败、404、JSON 解析失败都会走到不同分支,漏掉一个就静默失败。
实操建议:
- 检查
response.ok判断 HTTP 状态是否为 2xx - 显式调用
response.json()并用try/catch包裹,捕获 JSON 格式错误 - 避免在
fetch()外层用async/await却不处理 reject —— 未 catch 的 promise rejection 会触发全局警告
示例:
fetch('data/dashboard.json')
.then(response => {
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return response.json();
})
.then(data => renderDashboard(data))
.catch(err => console.error('加载仪表盘数据失败:', err));
JSON 数据结构不匹配导致图表/表格渲染为空
前端库(如 Chart.js、ApexCharts、DataTables)对输入数据格式有强约定。常见问题:字段名大小写不符、嵌套层级多了一层、数值是字符串而非数字。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
实操建议:
- 用
console.log(data)确认顶层结构,再逐层展开看关键字段是否存在(比如data.metrics还是data.data.metrics) - 数值类字段(如
value、count)用Number()或一元加号+data.value强转,避免图表显示 NaN - 时间字段若为字符串(如
"2024-05-20"),Chart.js 需要先转成Date对象,否则 X 轴乱序
开发阶段如何快速验证 JSON 加载流程
不依赖后端或真实数据文件,也能跑通整个链路。关键是把“数据获取”和“数据渲染”解耦。
实操建议:
- 写一个
mockData对象,结构和真实 JSON 一致,直接传给renderDashboard(mockData)测试 UI - 在
fetch()成功回调里加console.table(data.slice(0,5))快速预览前几条记录 - 用浏览器开发者工具的 Network 标签页,筛选
json类型,确认请求发出、状态码 200、响应体可读
真正难的不是读文件,而是让数据结构、类型、时序都对得上渲染逻辑。本地服务 + 显式错误处理 + 结构校验,这三步缺一不可。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










