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

修复JavaScript通过fetch获取API数据并渲染到HTML的错误代码

代码存在的问题
  • 作用域错误:data变量定义在fetch的then回调函数内部,属于局部变量,回调外无法访问
  • 异步逻辑错误:res.json()返回的是Promise对象,直接赋值无法拿到接口返回的真实数据,需要等待异步执行完成
  • 执行顺序错误:DOM更新代码写在fetch异步请求外部,请求还没返回就会先执行DOM赋值,此时目标数据不存在
  • 字段名错误:Binance接口返回的对应字段是小写开头的priceChange,代码中大写开头的PriceChange无法匹配到对应值
修复方案

提供两种写法可任选:

写法1:async/await 写法(更易读)

<div id="priceChange"></div>

<script>
setInterval(tradestime, 5000);
// 声明为异步函数
async function tradestime(){
  try {
    // 等待接口请求完成
    const res = await fetch("https://api.binance.com/api/v1/ticker/24hr?symbol=LTCUSDT");
    // 等待解析完接口返回的JSON数据
    const data = await res.json();
    // 拿到数据后再更新DOM,同时修正字段名
    document.getElementById("priceChange").innerHTML = data.priceChange;
  } catch (err) {
    // 捕获异常,避免请求失败时逻辑中断
    document.getElementById("priceChange").innerHTML = "数据加载失败";
    console.error("请求错误:", err);
  }
}
</script>

写法2:Promise then 链写法

<div id="priceChange"></div>

<script>
setInterval(tradestime, 5000);
function tradestime(){
  fetch("https://api.binance.com/api/v1/ticker/24hr?symbol=LTCUSDT") 
  // 解析JSON数据
  .then(res => res.json())
  // 拿到数据后更新DOM
  .then(data => {
    document.getElementById("priceChange").innerHTML = data.priceChange;
  })
  // 捕获请求异常
  .catch(err => {
    document.getElementById("priceChange").innerHTML = "数据加载失败";
    console.error("请求错误:", err);
  })
}
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:24:02