还在死磕 Ajax?那可就 out 了!
江山代有人才出,各领风骚数百年。
前言
想当年面试时,AJAX 基本是必考题,像什么“异步调用、高性能”等是必答的。那时的 AJAX 是真的火,前端就没有不用 AJAX 的。
然而,古语云“人无百日好,花无百日红”,又云“江山代有人才出,各领风骚数百年”,对于 AJAX,当然也不例外。
这不,在最近这两年,我们明显可以发现很多新生框架中都有了 Fetch 的影子,而它的易用性和稳定性也是得到了反复验证的。
Fetch 的概念
Fetch 提供了对 Request 和 Response (以及其他与网络请求有关的)对象的通用定义。使之今后可以被使用到更多的应用场景中:无论是 service worker、Cache API、又或者是其他处理请求和响应的方式,甚至是任何一种需要你自己在程序中生成响应的方式。
它同时还为有关联性的概念,例如CORS和HTTP原生头信息,提供一种新的定义,取代它们原来那种分离的定义。
发送请求或者获取资源,需要使用 WindowOrWorkerGlobalScope.fetch()
方法。它在很多接口中都被实现了,更具体地说,是在 Window 和 WorkerGlobalScope 接口上。因此在几乎所有环境中都可以用这个方法获取到资源。
兼容性
要看一个新的 API 会不会火起来,最简单的办法就是看它的兼容性,毕竟,如果兼容性不好,那再好用的 API 也很难火起来。
可以看到,Fetch 方法对除 IE 之外的浏览器来说,兼容性简直不要太好,这可以说是已经拥有了大火的前提条件。
和 AJAX 的区别
既然是用来替代 AJAX 的,那必然是有一些 AJAX 所不具备的特性优势了,否则,凭啥取代啊。
总结一下,区别如下:
- Fetch 使用 Promise,不使用回调函数,因此大大简化了写法,写起来更简洁。
- Fetch 采用模块化设计,API 分散在多个对象上(Response 对象、Request 对象、Headers 对象),更合理一些;相比之下,XMLHttpRequest 的 API 设计并不是很好,输入、输出、状态都在同一个接口管理,容易写出非常混乱的代码。
- Fetch 通过数据流(Stream 对象)处理数据,可以分块读取,有利于提高网站性能表现,减少内存占用,对于请求大文件或者网速慢的场景相当有用。XMLHTTPRequest 对象不支持数据流,所有的数据必须放在缓存里,不支持分块读取,必须等待全部拿到后,再一次性吐出来。
Fetch 是相当符合潮流的,至少,我们可以少写很多回调函数了,代码的逼格也可以有所提升了。
Fetch 的用法
fetch()
方法必须接受一个参数——资源的路径。无论请求成功与否,它都返回一个 Promise 对象,resolve 对应请求的 Response。基本语法如下:
fetch(url) .then(...) .catch(...)
举个例子:
fetch('https://bianchengsanmei.com/getInfo') .then(response => response.json()) .then(json => console.log(json)) .catch(err => console.log('Request Failed', err));
上面例子中,fetch()
接收到的 response 是一个 Stream 对象,response.json() 是一个异步操作,取出所有内容,并将其转为 JSON 对象。
Promise 可以使用 await 语法改写,使得语义更清晰:
async function getJSON() { let url = 'https://bianchengsanmei.com/getInfo'; try { let response = await fetch(url); return await response.json(); } catch (error) { console.log('Request Failed', error); } }
上面示例中,await
语句必须放在 try...catch
里面,这样才能捕捉异步操作中可能发生的错误。
总结
所谓时势造英雄,因 JavaScript 标准的飞速发展,AJAX 起来了,却即将落下,Fetch 又能走多远,让我们拭目以待。
以上就是关于 Fetch 的一些总结,主要是学习借鉴前辈大佬们的文章教程,希望多少能带给你一点收获!
~
~本文完,感谢阅读!
~
学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!
大家好,我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教!
你来,怀揣期望,我有墨香相迎! 你归,无论得失,唯以余韵相赠!
知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!
参考文档:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
HarmonyOS实战—Image组件的剪切和缩放
1. Image图片标签 概述:图片(Image)是用来显示图片的组件。 常见的属性:id,长、宽、高等。 具体可以参考华为开发手册(组件的通用属性): https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-component-common-xml-0000001138483639 比较重要的属性: 蓝色的区域就是背景图片 如果image标签比较大,而要展示的图片比较小,前景图片就盖不住背景图片,背景图片就会展示出来。 工作当中,关于image标签有两个习惯: 大小会包裹内容,图片多大,image标签多大 image标签基本不会设置背景图片,只会设置前景图片,因为前景图片才是要展示出来的图片 新建项目:ImageApplication <Image ohos:height="1000px" ohos:width="1000px" ohos:image_src="$media:girl1" ohos:background_element="#0000FF" /> 使用的girl图片如下...
- 下一篇
OAuth2.1授权服务器Spring Authorization Server正式孵化成功进入Spring项目家族
今天Spring官方宣布 Spring Authorization Server 已正式退出实验状态并进入Spring 项目的产品家族! 此举恰逢本周的 0.2.0 版本发布,这是第一个正式支持的生产就绪版本。 自2020 年 4 月Spring Authorization Server公布以来以来,已经实现了OAuth 2.1 授权协议的绝大部分,并为 OpenID Connect 1.0 提供适度支持。随着该项目进入下一个开发阶段,其重点将转向推进对 OpenID Connect 1.0 的支持。 Spring 官方表示: 感谢在这么短的时间内为该项目做出贡献并帮助其发展的所有人。我们对当前构建的项目基石充满信心,并对Spring Authorization Server进入下一个生命周期非常兴奋。我们期待共同继续这项工作,并最终使 Spring Authorization Server 成为 Java 平台上支持 OAuth 2 Authorization Server 的实施标准。 目前Spring Authorization Server初步进入生产就绪状态,在Github上...
相关文章
文章评论
共有0条评论来说两句吧...