Fetch API 的使用和采坑记录

比 XHR 好用的 Fetch

在说 Fetch 和 XHR 之前,不得不先提一提 Axios,前端同学天天用它发送请求。所谓 Axios 其实是基于 Promise 封装的 HTTP 库。本质也是对原生 XMLHttpRequest 的封装。而原生的 XHR 由于编写过于麻烦,已被 axios 取代了,所以作为 XHR 的升级版,Fetch 应运而生,而它也确实提供了更强大和灵活的功能集。

Fetch 的使用

Fetch 天生就支持 Promise,这让它写起来非常方便,不用像 XHR 一样去判断 readyState 的各种状态:

fetch('http://www.xxx.com/').then(...).then(...).catch(...); 

当然,使用 asynctry...catch 也是很香的。

返回的结果

注意,Fetch 会返回一个 Response 对象,以此呈现对一次请求的响应数据。以下罗列出一些常用的:

属性 类型 说明
ok boolean true 表示成功(HTTP 状态码的范围200-299)
body ReadableStream 可读取的二进制内容,里面放着后端返回的数据
status number 状态码
statusText string 与该 Response 状态码一致的状态信息
url string 请求地址
headers Headers 请求头信息(看不到,通过 get 读取)

其中,需要注意的是:只有当网络故障时或请求被阻止时,才会标记为 rejected。也就是说,当接收到 404 或 500 这种表示错误的 HTTP 状态码时,返回的 Promise 也是正常的 fulfilled 状态 ,只不过此时 ok 属性为 false。

读取 Response

Response 提供了很多读取 ReadableStream 的方法:arraybuffer()blob()formData()json() text()等,具体请自行参考文档。这里我们使用真实的例子,来介绍下 json() 的使用:

fetch('https://api.github.com/repos/javascript-tutorial/en.javascript.info/commits').then(resp => {console.log('response
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值