Fetch 是 JavaScript 发起网络请求的现代标准,基于 Promise、语法简洁,但需手动处理 HTTP 错误和 Cookie;它不是 Ajax 的替代品,而是其思想在新标准下的升级实现。
Fetch API 是 JavaScript 中用于发起网络请求的现代标准方法,相比传统 Ajax(通常指 XMLHttpRequest),它更简洁、基于 Promise、更易读写,也更符合当前异步编程习惯。但它不是 Ajax 的“替代品”,而是 Ajax 思想在新标准下的实现升级。
Fetch 默认返回一个 Promise,解析成功后得到一个 Response 对象,需进一步调用其方法(如 .json()、.text())才能读取响应体:
fetch('/api/users')
fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username: 'admin', password: '123' })
})
if (!res.ok) throw new Error(res.status)(Fetch 不会因 4xx/5xx 自动 reject).json() 会报错;如需多次使用,可先克隆:res.clone().json()
不是功能增减,而是设计哲学和使用体验的差异:
async/await 更自然onerror;Fetch 只在网络断开等极少数情况 reject,404、500 等仍返回 resolve 的 Response,需手动判断 res.ok
credentials: 'include';Ajax 默认同源会发xhr.upload.onprogress 的原生支持(需借助 ReadableStream 或第三方库)日常开发中优先用 Fetch,但注意这些实际限制:
XMLHttpRequest
或封装 Fetch 流credentials: 'include' 即可,比 Ajax 设置 withCredentials = true 更直观基本上就这些。Fetch 不是黑魔法,它让常见请求变简单,但也把一些隐含行为(比如错误判定、Cookie 策略)显式化了——理解这点,用起来就踏实。