fetch 不是xhr_FetchApi 和XHR的主要区别

FetchApi 和XHR的主要区别:主要是请求方式的不同。

XHR就是xmlhttprequirce的请求方式

FetchApi 类似 (function(){}.then().catch())的模式,FetchAPI可以流式请求体的模式,更方便请求。

Fetch API更加现代

XHR 和 Fetch API 最显著的区别就是调用方式不同。这一点大家应该都知道吧。

举个例子,下面两端代码完成的是同一功能:

// 用 XHR 发起一个GET请求varxhr =newXHMHttpRequest();xhr.open('GET',url);xhr.responseType ='json';xhr.onload =function(){console.log(xhr.response);};xhr.onerror =function(){console.log('something wrong~ ╮( ̄▽ ̄)╭');};xhr.send();// 用 Fetch 完成同样的请求fetch(url).then(function(response){returnresponse.json();}).then(function(jsonData){console.log(jsonData);}).catch(function(){console.log('something wrong~ ╮( ̄▽ ̄)╭');});

相比 XHR ,Fetch 结合了现代的编码模式,使用起来更简洁 ,完成工作所需的实际代码量也更少。

Fetch API更底层

其实,刚才说到的 Fetch API 并不是指仅仅一个 fetch 方法,还包括 Request、 Response、Headers、Body都一系列原生对象。对于传统的XHR而言,你必须使用它的一个实例来发出请求和处理响应。 但是通过Fetch API,我们还能够通过刚才提到的原生对象,明确的配置请求和响应。这些底层的抽象让 Fetch API 比 XHR 更灵活。

举个例子,现在要下载一个很大的 utf-8 格式的 txt 文件,我们通过流式的响应体而不是文本的形式读取,最后显示在一个div中。(为什么使用流、使用流有什么好处我就不做过多解释了……)

document.addEventListener('DOMContentLoaded',function(e){varurl ='Test.txt';vardiv =document.getElementById('content');varprogress =0;varcontentLength =0;fetch(url).then(function(response){// 通过响应头获取文件大小contentLength =response.headers.get('Content-Length');varpump =function(reader){returnreader.read().then(function(result){// 如果流中的内容读取完毕,result.done的值会变为trueif(!result.done){// 获取流中的数据varchunk =result.value;vartext ='';// 流中的数据是一串字节码,需要做转码for(vari =3;i

在上面的例子中,我们不止使用了流来下载文件,还通过响应头获取了响应的具体信息,显示了下载的进度。虽然使用XHR也能做到使用流来读取文件,不过现在应该只有IE浏览器支持。但是 Fetch API 提供了访问数据的实际字节的方法,而 XHR 的 responseText 只有文本形式,这意味着在某些场景下它的作用可能非常有限。

Fetch API更接近未来

当我们在谈论 Fetch API 时,我们在谈论的不止是这些已经胜过 XHR 的地方,更是在谈论 Fetch API未来的可能性。比如未来基于 Fetch 和 Service Worker 的缓存和请求拦截技术。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值