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

Expo React Native中fetch调用response.json()报Unexpected end of input错误

报错原因
  • 核心问题是你在fetch配置中添加了mode: 'no-cors'参数:该模式是浏览器环境的特殊配置,用于发起不需要获取响应内容的跨域请求,此模式下返回的响应为不透明类型,响应体完全无法读取,调用response.json()时相当于解析空内容,自然触发Unexpected end of input语法错误。
  • Node.js环境没有浏览器的同源策略限制,也不识别no-cors参数,所以同一段代码可以正常运行。
解决方案
  1. 首先删除fetch配置中的mode: 'no-cors'行,React Native(Expo)环境本身不存在浏览器的同源策略限制,完全不需要添加该参数,添加反而会导致响应体无法读取。
  2. 修正后的请求代码可以增加异常捕获逻辑,方便定位后续可能出现的后端返回格式问题,参考代码如下:
async function postData (url, data) {
  const params = {
    method: 'POST',
    headers:{
      Accept: 'application/json',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(data)
  };
  let response = await fetch(url, params);
  try {
    // 先确认响应状态正常再解析
    if (!response.ok) {
      throw new Error(`请求异常,状态码:${response.status}`);
    }
    const responseJson = await response.json();
    // 原代码此处返回了response而非解析后的json,可根据你的需求调整
    return responseJson;
  } catch (err) {
    // 解析失败时打印原始响应内容排查问题
    const rawText = await response.text();
    console.error('JSON解析失败,原始响应内容:', rawText);
    throw err;
  }
}
  1. 若删除no-cors后Web端调试时出现跨域报错,仅需要后端服务配置CORS规则允许前端请求即可,Expo原生端运行不会存在该问题。
额外注意

你原代码中postData函数最后返回的是未解析的response对象,调用postData的then回调中拿到的也会是原始响应对象,而非解析后的JSON数据,可根据你的业务需求调整返回值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:06:05