状态码200,获取数据成功还是进入了catch错误函数

本文分享了一次因that未正确赋值导致axios和ajax请求虽成功但仍触发catch函数的经历,强调了代码细节的重要性,提醒开发者注意变量作用域及赋值操作。

在这里插入图片描述
解决原因:that没有赋值,axios,ajax虽然获取数据成功,但是里面有错误的代码,还是会走catch函数,怪自己粗心大意,也付出了半小时的宝贵教训时间。

### 如何在前端捕获 HTTP 200 状态码 HTTP 200 状态码表示请求已成功完成,通常用于响应数据操作的成功结果。在前端开发中,可以通过多种方式捕获该状态码并处理其返回数据。 #### 使用 Fetch API 捕获 HTTP 200 状态码 Fetch 是现代浏览器内置的一种网络请求工具,它允许开发者发起网络请求并解析响应。当服务器返回 HTTP 200 状态码时,`fetch()` 的 `then()` 方法会被触发以进一步处理响应内容[^1]。 以下是通过 Fetch API 处理 HTTP 200 响应的一个示例: ```javascript fetch('https://example.com/api/endpoint', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ oldPassword: 'password123', newPassword: 'newpassword456' }) }) .then(response => { if (response.ok && response.status === 200) { // 验证状态码是否为 200 return response.json(); // 解析 JSON 数据 } else { throw new Error(`Unexpected status code ${response.status}`); } }) .then(data => console.log('Success:', data)) // 成功后的逻辑 .catch(error => console.error('Error:', error)); // 错误处理 ``` 在此代码片段中,`if (response.ok)` 和 `response.status === 200` 被用来验证响应的状态码是否为 200。如果条件成立,则继续执行后续的业务逻辑;否则抛出错误以便进入 `.catch()` 分支进行统一处理。 --- #### 使用 Axios 库捕获 HTTP 200 状态码 Axios 是一个流行的基于 Promise 的 HTTP 客户端库,在 Vue.js 或 React 中广泛使用。对于 HTTP 200 状态码的捕获,可以直接利用 Axios 提供的功能实现更简洁的操作。 下面是一个使用 Axios 来捕获 HTTP 200 并处理相应数据的例子: ```javascript import axios from 'axios'; axios.post('https://example.com/api/endpoint', { oldPassword: 'password123', newPassword: 'newpassword456' }, { headers: { 'Content-Type': 'application/json' } }) .then(response => { if (response.status === 200) { // 明确检查状态码是否为 200 console.log('Response Data:', response.data); // 输出返回数据 } else { throw new Error(`Unexpected status code ${response.status}`); } }) .catch(error => { if (error.response) { console.error('Error Response:', error.response); } else { console.error('Network or other errors:', error.message); } }); ``` 在这个例子中,`response.status === 200` 作为判断依据确认接收到的是成功的 HTTP 请求回应。一旦满足此条件即可安全访问 `response.data` 属性中的实际有效负载[^2]。 --- #### 特殊情况下的注意事项——Blob 文件流 某些情况下,API 可能会返回二进制大对象(Binary Large Object, 即 Blob),比如文件下载链接。即使在这种情形下,HTTP 状态码也可能设置成 200 表明传输过程无误。然而需要注意的是,单纯依赖于状态码不足以辨别最终结果究竟是预期中的文件还是某种形式上的失败通知。 针对这种情况可以采用如下策略加以应对: ```javascript function fetchFile(url) { return fetch(url).then(async response => { if (!response.ok || !response.body) { const errorMessage = await response.text(); throw new Error(errorMessage); } const contentType = response.headers.get('content-type'); if (/text|json/.test(contentType)) { const jsonData = await response.json(); if ('errorCode' in jsonData) { throw new Error(jsonData.errorMessage ?? 'Unknown error occurred.'); } } return response.blob(); // 返回真正的文件资源 }); } // 示例调用 fetchFile('/api/download') .then(blob => URL.createObjectURL(blob)) .then(fileUrl => window.open(fileUrl)); ``` 上述函数首先尝试读取可能存在的文本或 JSON 类型的内容来检测潜在问题,只有完全排除这些可能性之后才会认定当前实例确实代表了一个有效的文件实体[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值