从 fetch 说开,到 blob

背景

之前看过很多 fetch 相关的文章,说的都是 fetch 如何使用,以及 fetch 的优势。但是最近也发现 fetch 有很多坑。

前两天有个上传文件的需求,需要在页面上显示上传文件的进度条。之前产品线做过类似的内容,用的是 axios,通过 onUploadProgress 回调函数来获取上传进度。这次做需求的时候发现,新的产品线用的是 fetch 来处理请求。然后就发现 fetch 不支持上传进度获取。之前对 fetch 和 XMLHttpRequest 之间没有太多对比,所以这次就借机会重新了解了下两者的区别。

XHR vs Fetch

首先 fetch 和 XMLHttpRequest 都是 AJAX 技术,都是不刷新页面获取后端数据,然后在前端更新页面的方式。然后 fetch 的出现,一定程度上取代了 XMLHttpRequest。因为 fetch 的写法更加简洁,优雅,并且通过链式调用的方式而不是回调的方式处理响应。看起来 fetch 优势明显。但是 fetch 却也有很多问题。或者说有很多无法取代 XMLHttpRequest 的地方。

1. 浏览器支持:“古老”的 XMLHttpRequest 在浏览器支持方面明显有优势。fetch 则主要支持 2017 年之后的浏览器版本。因此在选择的时候一定要考虑用户的情况,再决定选择哪种请求方式。

2. cookie:fetch 向服务器发送请求的时候默认不发送 cookies,通过添加 credentials 来发送 cookies。

fetch(
    'http://domain/service',
    {
      method: 'GET',
      credentials: 'same-origin'
    }
)复制代码

3. 后端错误无法弹出:fetch 在处理 404 或者 500 错误的时候不会触发 reject,进而进入到 catch() 语句中。只有当网络错误或者其他请求无法完成的时候才会触发 catch() 语句。因此使用 fetch 的时候,对错误处理的方式会更加复杂。

4. timeout:XMLHttpRequest 可以通过下面的方式添加 timeout。

// set timeout
xhr.timeout = 3000; // 3 seconds
xhr.ontimeout = () => console.log('timeout'
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值