世代有才,各领风骚数百年。前言大家好,我是编程三昧的作者,小前端尹一望。自从昨天发了《还在死磕 Ajax?那可就 out 了!》篇文章后,就收到了大家的一些评论。评论非常周到和深入。说实话,虽然我尽力回答大家的问题,但还是避免不了对其中一些概念理解上的歧义。很荣幸能得到同事们的指点,比如:谢谢你们的好意,让我在成长的道路上进步了几分。现在总结一下,评论区涉及的主要问题如下:Fetch和Axios/Ajax有什么关系?Fetch真的会取代Ajax吗?有没有封装好的Fetch工具库推荐?为了不辜负大家的热忱,我在这里尽量解释一下这些问题,如有遗漏,还请多多包涵!概念和特性首先,让我们了解一下Ajax、Axios和Fetch的概念。Ajax的英文全称是AsynchronousJavaScript+XML,翻译过来就是异步JavaScript和XML。它用于描述一种使用现有技术集合的“新”方式,其中“新”方式主要涉及:HTML或XHTML、CSS、JavaScript、DOM、XML、XSLT,最重要的是XMLHttpRequest。当结合这些技术使用AJAX模型时,Web应用程序可以快速呈现用户界面的增量更新,而无需重新加载(刷新)整个页面。这允许程序更快地响应用户操作。Ajax是一个概念模型,是很多现有技术的集合,并不特指某一种技术。Ajax最重要的特性是它可以部分刷新页面。AxiosAxios是一个基于Promise的网络请求库,适用于Node.js和浏览器。它是同构的(即相同的代码可以在浏览器和Node.js中运行)。在服务器端,它使用本机Node.jshttp模块,在客户端,它使用XMLHttpRequest。这里只关注客户端的Axios,它是一个基于XHR进行二次封装的工具库。客户端Axios的主要特点是:从浏览器创建XMLHttpRequests支持PromiseAPI拦截请求和响应转换请求和响应数据取消请求自动转换JSON数据客户端支持防御XSRFFetchFetch提供获取资源(包括跨域请求)的接口).Fetch是一个现代概念,相当于XMLHttpRequest。它提供了许多与XMLHttpRequest相同的功能,但设计为更具可扩展性和效率。Fetch的核心在于对HTTP接口的抽象,包括Request、Response、Headers和Body,以及初始化异步请求的全局fetch。由于这些由JavaScript实现的抽象HTTP模块,其他接口可以轻松地使用这些功能。此外,Fetch还利用了请求的异步特性——它基于Promise。fetch()方法必须接受一个参数——资源路径。不管请求成功与否,都会返回一个Promise对象,resolve对应请求的Response。Fetch与Axios/Ajax的关系通过上面对三个概念的解释,我们应该对它们之间的关系有了一个大概的了解。这里我用一张图来展示一下:对于上图,我来解释一下:Ajax是一种异步JavaScript+XML模型(技术集),所以Fetch也是Ajax的一个子集。以前我们常说的Ajax默认是指以XHR为核心的技术集合。在Fetch之后,Ajax不再仅仅指XHR,现在我们把以XHR为核心的Ajax技术称为传统的Ajax。Axios是传统Ajax(XHR)的子集,因为它是基于XHR的包装器。Fetch真的会取代Ajax吗?其实问这个问题更准确的方式应该是:Fetch真的会取代传统的Ajax(XHR)吗?要回答这个问题,我们需要明确以下几点:异步编程是JavaScript发展的一大趋势,大多数浏览器都已经支持标准的Promise。FetchAPI是浏览器自带的API,它基于标准的Promise。传统的Ajax原生写法结构比较混乱,不符合关注点分离原则。写过远程XHR的同学应该深有体会。axios是一个基于XHR封装的Promise请求库,使用起来确实方便。基于以上几点,我的观点是Fetch最终会取代传统的Ajax,只是这个过程可能会比较漫长。虽然目前传统的Ajax(比如Axios之类)在使用规模上远超Fetch,但是要知道这是XHR这十年来的累积效应。封装好的axios在易用性上比原生的XHR差了一大截,但毕竟是封装好的。axios相对于原生的Fetch,在起源上略逊一筹,原生的API自然会支持。功能越多,使用起来就越灵活。Fetch工具库推荐在昨天文章的评论区,有同学推荐了一个叫Mande的Fetch工具库。有兴趣的同学可以看看。综上所述,以上就是对Fetch和Ajax问题的简单讲解,希望对大家有所启发。就个人而言,我非常期待Fetch能够取代传统的Ajax。科技的发展需要不断注入活力。我还能工作几十年,但我不想让前端技术停滞不前,多无聊啊!~~本文到此结束,感谢阅读!~学习有趣的知识,认识有趣的朋友,塑造有趣的灵魂!大家好,我是〖编程三昧〗的作者王隐,我的公众号是《编程三昧》,欢迎关注,希望大家多多指教!你来,怀揣期待,我以墨香迎接你!您归来,不分得失,只送回味!知识与技能并重,内功与外功并重,理论与实践两手抓,两手都要用力!
