response.ok是布尔值,仅当http状态码为200–299时为true;fetch不会因404/500等http错误reject,必须手动检查response.ok并结合status/textstatus处理,再解析body判断业务逻辑。

在 JavaScript 中使用 Fetch API 时,response.ok 是一个布尔值,表示 HTTP 响应状态码是否落在 200–299 范围内。它不等于“请求成功”,而是特指“响应状态码表示成功”。只要状态码是 2xx,response.ok 就为 true;否则为 false(比如 404、500、甚至 301/302 等重定向状态码都会返回 false)。
如何正确检查 response.ok
Fetch 不会因 HTTP 错误状态码(如 404 或 500)而自动抛出异常——它只在**网络失败**(如断网、DNS 失败、CORS 拒绝)时 reject Promise。因此,必须手动检查 response.ok 来判断业务层面是否成功:
- 先用
await fetch(...)获取 response 对象 - 再用
if (!response.ok)判断状态码是否异常 - 若不 ok,可结合
response.status和response.statusText做具体处理
常见错误:混淆 ok 与网络成功
response.ok === true 并不保证数据可用或逻辑正确。例如:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 服务器返回 200 但 body 是空 JSON
{}或错误提示字符串 - 接口返回 200 +
{"code": 40001, "msg": "token expired"}—— 这类需额外解析 body 判断业务状态 - 304 Not Modified 会返回
ok: false,即使资源未变,也需按需处理
推荐的完整处理模式
兼顾网络层、HTTP 状态层和业务数据层:
try {
const res = await fetch('/api/user');
if (!res.ok) {
throw new Error(`HTTP ${res.status}: ${res.statusText}`);
}
const data = await res.json();
if (data.code !== 0) { // 假设后端约定 code=0 表示业务成功
throw new Error(data.msg || '业务请求失败');
}
console.log('成功:', data);
} catch (err) {
console.error('请求出错:', err.message);
}
注意重定向和认证相关行为
默认情况下,fetch 的 redirect: "follow"(自动跟随 3xx),此时你拿到的 response 是最终响应,ok 取决于最后一个状态码。若设为 "manual",则 301/302 响应本身 ok 为 false,需自行读取 response.headers.get('Location') 处理。另外,401/403 等认证失败也会使 ok 为 false,适合统一跳转登录页。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










