使用fetch()请求返回[object Response],无法解析JSON求助
问题原因及解决方案
你的问题根源在于设置了mode: 'no-cors',这个配置会让浏览器返回不透明响应(opaque response),这种响应受浏览器安全策略限制,无法读取任何内容——这就是为什么你用response.json()会报错,response.text()也拿不到有效数据,直接打印response会显示[object Response]。
而Postman不属于浏览器环境,不受CORS策略约束,所以能正常获取接口返回的JSON数据。
解决步骤:
- 第一步:移除
mode: 'no-cors'配置
删掉fetch选项里的mode: 'no-cors',默认的cors模式会自动处理跨域请求(前提是后端已经配置了正确的CORS响应头,比如Access-Control-Allow-Origin)。修改后的代码:try { let response = await fetch( `https://us-central....`, { method: 'post', body: JSON.stringify(customer), headers: { 'Content-Type': 'application/json' // 建议添加,明确告诉后端请求体格式 } } ) if (!response.ok) { throw new Error(`HTTP错误!状态码: ${response.status}`); // 处理4xx/5xx错误 } let data = await response.json() console.log('响应数据:', data) } catch (e) { console.error('请求错误: ', e) return e } - 第二步:确保后端配置CORS
如果移除mode: 'no-cors'后出现CORS错误,需要后端在响应头中添加必要配置:Access-Control-Allow-Origin: *(开发环境可临时用,生产环境建议指定具体域名)Access-Control-Allow-Methods: POST(允许POST请求方法)Access-Control-Allow-Headers: Content-Type(允许携带Content-Type头)
- 若后端无法修改CORS配置
开发环境可通过Webpack DevServer的proxy配置转发请求,生产环境用Nginx反向代理,绕过浏览器的CORS检查。
补充说明:
no-cors模式仅适用于不需要读取响应内容的场景(比如加载第三方静态资源),如果你需要获取接口返回的数据,绝对不能使用这个模式。
内容的提问来源于stack exchange,提问作者D Ags
相关产品推荐
相关产品推荐

