fetch GET 请求需检查 response.ok 并手动解析响应体,POST 需设置 Content-Type 且 body 要 jsON.stringify;axios 默认处理错误状态码和自动序列化,fetch 需手动处理;跨域需确认后端 CORS 配置,尤其带 credentials 时 access-Control-Allow-Origin 不能为通配符。

fetch 基本用法:GET 请求怎么写才不报错?fetch 默认只发 GET,但容易忽略两点:一是它**不会自动抛出 http 错误状态码(如 404、500)**,二是**响应体需要手动解析**。直接 await fetch(url) 返回的是 Response 对象,不是 json 数据。
示例:
fetch('/api/users') .then(res => { if (!res.ok) throw new Error(`HTTP ${res.status}`); return res.json(); }) .then(data => console.log(data)) .catch(err => console.error(err));
POST 请求怎么传 JSON 数据? 发 POST 时,常见错误是漏掉 Content-Type 头或没序列化 body:
示例:
fetch('/api/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: 'a@b.c', password: '123' }) });
axios 和 fetch 的关键区别在哪?axios 是第三方库,fetch 是浏览器原生 API。它们行为差异直接影响调试体验:
简单封装一个带错误处理的 fetch 函数比引入 axios 更轻量,但项目中已有 axios 就别重复造轮子。
跨域请求失败时该看哪几处? CORS 报错(如 No 'Access-Control-Allow-Origin' header)不是前端代码问题,但前端要确认三件事:
- 请求 URL 是否确实跨域(协议、域名、端口任一不同即跨域)
- 前端是否在
fetch 中加了 mode: 'cors'(默认就是,一般不用显式写)
- 如果带认证信息(cookies 或 Authorization header),后端必须返回
Access-Control-Allow-Credentials: true,且 Access-Control-Allow-Origin *不能是通配符 **,必须指定具体域名
fetch 中加了 mode: 'cors'(默认就是,一般不用显式写) Access-Control-Allow-Credentials: true,且 Access-Control-Allow-Origin *不能是通配符 **,必须指定具体域名 开发时后端未配 CORS,最快速验证方式是临时用代理(如 vite 的 server.proxy 或 webpack devServer 的 proxy),而不是关浏览器安全策略。
立即学习“Java免费学习笔记(深入)”;
真正难调的往往不是语法,而是后端返回的 status code 没被检查,或者 cookie 设置了 SameSite=Strict 却在跨站场景下使用。