现在window.fetch基本上每一个浏览器都已经自带(IE除外),以后再也不用引入$.ajax、axios、fetch了就能用了
axios没有这殊荣,原生自带意味着什么,不用说什么了、多么重要能让window当中自带fetch方法,以前听过一种说法叫传统ajax已死,fetch永生,当时还以为是一句笑话,现在看来,fetch已经征服了各个js大佬,正在走向通用化的道路
如果fetch组建通用之后,不再考虑浏览器兼容问题,那么会有多么可怕的事实、就是强迫所有人放弃任何ajax封装方法、因为这是自带的,无论你使用与否,浏览器都会把它放到window对象当中,对于那些对网页性能要求极高的前段工作者们,是绝对不会允许自己的代码中引入不必要的代码、而对于那些不愿意引入资源的人、也会强迫自己熟悉fetch得到使用方法
所以说fetch走向了成功!!!!!!!
总结一下,Fetch 优点主要有:
-
语法简洁,更加语义化
-
基于标准 Promise 实现,支持 async/await
-
同构方便,使用 isomorphic-fetch
先看一下 Fetch 原生支持率:
原生支持率并不高,幸运的是,引入下面这些 polyfill 后可以完美支持 IE8+ :
-
由于 IE8 是 ES3,需要引入 ES5 的 polyfill: es5-shim, es5-sham
-
引入 Promise 的 polyfill: es6-promise
-
引入 fetch 探测库:fetch-detector
-
引入 fetch 的 polyfill: fetch-ie8
-
可选:如果你还使用了 jsonp,引入 fetch-jsonp
-
可选:开启 Babel 的 runtime 模式,现在就使用 async/await
Fetch polyfill 的基本原理是探测是否存在 window.fetch
方法,如果没有则用 XHR 实现。这也是 github/fetch 的做法,但是有些浏览器(Chrome 45)原生支持 Fetch,但响应中有中文时会乱码,老外又不太关心这种问题,所以我自己才封装了 fetch-detector
和 fetch-ie8
只在浏览器稳定支持 Fetch 情况下才使用原生 Fetch。这些库现在每天有几千万个请求都在使用,绝对靠谱!
最后说一句 传统AJAX已死,Fetch永生!!