JavaScript调用API获取的JSON数据无法在HTML中展示问题排查
问题根源
- 你错误地将数组索引
[b]拼接进了JSON的键名字符串里,实际API返回的结构中,Tool${a}本身是一个数组对象,并不存在名为ToolX[Y]的独立字段。你拼接出来的键名在返回的JSON对象中不存在,自然会返回undefined。 - 若你的JSON结构中Tool字段总数不足44组,写死的循环条件
a<45也会导致部分Tool键名不存在,触发undefined。
修正后代码
<script> async function load(){ let link = 'Here is API address'; // 增加请求错误捕获,避免异常无反馈 try { let data = await fetch(link); if(!data.ok) throw new Error('接口请求异常') let obj = await data.json(); var temp = ""; // 动态获取实际返回的Tool字段总数,避免写死数值越界 const totalTools = Object.keys(obj).filter(key => key.startsWith('Tool')).length; for(var a=1; a<=totalTools; a++){ const currentTool = obj[`Tool${a}`]; // 非法值直接跳过渲染 if(!Array.isArray(currentTool)) continue; temp += "<tr>"; // 取当前Tool数组的对应索引,不要把索引写入键名 for(var b=0; b<Math.min(5, currentTool.length); b++){ // 空值兜底,避免显示undefined temp += `<td>${currentTool[b] ?? ''}</td>`; } temp += "</tr>"; } document.getElementById("data_from_db").innerHTML = temp; } catch (e) { console.error('加载数据失败:', e) } } load(); </script>
额外优化建议
- 生产环境建议对返回字段做格式校验,避免后端结构变动导致前端渲染异常
- 可根据实际业务需求调整数组遍历的长度限制,无需强行固定为5个元素
- 列表渲染量较大时建议使用文档碎片优化DOM操作性能,减少页面重绘开销
内容的提问来源于stack exchange,提问作者Jun
相关产品推荐
相关产品推荐

