Fetch API 是现代浏览器发起网络请求的标准方式,相比 XMLHttpRequest 更简洁强大,基于 Promise 支持 async/await,但需手动处理状态码异常和响应解析,且不支持超时、上传进度监听等,IE 不兼容。
Fetch API 是现代浏览器中发起网络请求的标准方式,相比传统 Ajax(即 XMLHttpRequest),它更简洁、更强大,也更符合 JavaScript 的异步编程习惯。它不是“比 Ajax 好一点”,而是设计哲学和使用体验上的全面升级。
最基本的 GET 请求只需一行代码:
fetch('https://api.example.com/data')
但要注意:Fetch 默认只返回一个 Promise,它**不会自动解析响应体**,也不会在 HTTP 状态码异常(比如 404、500)时自动 reject —— 这是初学者最容易踩的坑。
推荐写法(带错误处理和 JSON 解析):
response.ok 判断状态码是否在 200–299 范围response.json() 获取数据(也可用 .text()、.blob() 等)try/catch 或 .catch() 捕获网络失败(如断网、跨域拒绝)示例:
async function getData() {
try {
const res = await fetch('/api/users');
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return await res.json();
} catch (err) {
console.error('请求失败:', err);
}
}
response.body.getReader() 可逐步读取大文件或实时数据(如 SSE)它不直接支持以下功能,需要手动补充:
AbortController 实现XMLHttpRequest.upload.onprogress 那样原生支持,需借助 ReadableStream 或第三方库{ credentials: 'include' } 才发送 Cookie新项目、主流浏览器环境、追求可维护性 → 优先用 Fetch。
需要精细控制上传进
度、强兼容 IE、或已有大量 XMLHttpRequest 封装 → 继续用 Ajax 也完全合理。
两者本质都是浏览器提供的底层能力,Fetch 是更现代的封装,不是对 Ajax 的“取代”,而是演进。