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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:12:03