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

JS类结构调用fetch获取数据后生成HTML内容无法渲染该如何解决

问题成因

问题核心是fetch是异步网络请求API,代码执行顺序不符合预期:

  • Table构造函数执行时,发起fetch请求后,主线程不会等待请求返回,会立即执行this.fill()方法
  • 此时fetch的响应还未返回,this.arr还是初始化的空数组,forEach遍历无内容可渲染
  • 后续fetch请求成功把数据写入this.arr时,渲染方法已经执行完毕,不会重新触发渲染,因此页面没有内容展示。

解决方案

调整调用逻辑,等fetch拿到数据后再执行渲染方法即可,修改后代码如下:

class AutoComplete{
  constructor(){
    console.log("constructor autocomplete")
    this.table = new Table();
  }
}

class Table{
  constructor(){
    console.log("constructor table")
    this.arr = []
    
    fetch('https://jsonplaceholder.typicode.com/posts')
    .then((response) => response.json())
    .then((data) => {
        this.arr = data
        // 数据加载完成后再调用渲染方法
        this.fill()
    });
    // 删掉原构造函数末尾的this.fill()调用
  }
  
  fill = () => {
    console.log("fill");
    const content = document.querySelector("#content");
    this.arr.forEach( ct => {
        const div = document.createElement("div");
        div.innerText = ct.body;
        content.appendChild(div);
    });
  }
}

let autoc = new AutoComplete();

额外说明

你注释掉的content.innerHTML += div写法是错误的:div是DOM对象,不是HTML字符串,直接拼接会得到[object HTMLDivElement]这类无效内容,当前使用的appendChild是正确的DOM插入方式,无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:39:04