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

为何从服务器发送至浏览器的JSON数据为undefined?——使用fetch()请求服务器数据异常排查求助

问题排查与解决

嘿,我立刻发现了问题的关键所在!你的fetch调用里,第一个.then()方法没有返回response.json()的结果,这导致Promise链传递中断,第二个.then()自然接收到undefined。

核心原因

response.json()方法返回的是一个Promise对象,它会异步解析响应体为JSON数据。在Promise链中,每个.then()必须返回一个值(或Promise),才能把结果传递给下一个.then()。你原来的代码里只是调用了response.json(),但没有将其返回,所以第一个.then()的返回值默认是undefined,第二个.then()的参数myJson就变成了undefined。

另外还有个小细节:请求头里的"accept": "application / json"多了个空格,应该写成"application/json",虽然这不一定是当前问题的直接诱因,但规范的MIME类型能避免潜在的解析异常。

修正后的代码

button.addEventListener('click', () => {
  fetch('/game-data', { 
    headers: { 
      "accept": "application/json", // 去掉空格
      "Content-Type": "application/json" 
    } 
  })
  .then(response => {
    console.log(response)
    // 关键:返回response.json()的Promise
    return response.json()
  })
  .then(myJson => {
    console.log(myJson) // 现在会输出 { data: "test-data" }
  })
  // 建议加上错误处理,避免请求失败时没有反馈
  .catch(error => {
    console.error('请求出错:', error)
  })
})

额外建议

加上.catch()来捕获请求过程中可能出现的错误(比如网络故障、服务器错误等),这样能让你的代码更健壮,也方便排查其他潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:47:33