fetch 用一行代码发起请求并返回 Promise,比 XMLHttpRequest 现代得多。但有两个著名坑:其一,HTTP 错误状态(404/500)不会 reject,需要手动检查 res.ok;其二,跨域、超时、取消都需要额外处理。
响应处理按内容分流:res.json() 解析 JSON、res.text() 取文本、res.blob() 取二进制。请求配置(method、headers、body、credentials)通过第二个参数对象传入。
async function post(url, data) { const res = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); if (!res.ok) throw new Error('HTTP ' + res.status); // 手动查错! return res.json(); } // 超时取消 const ac = new AbortController(); setTimeout(() => ac.abort(), 5000); fetch(url, { signal: ac.signal });