美文网首页
fetch 和 ajax 和 axios

fetch 和 ajax 和 axios

作者: 静_summer | 来源:发表于2019-11-17 17:55 被阅读0次

fetch:

  • 基于promise,Promise,generator/yield,await/async 都是现在和未来 JS 解决异步的标准做

  • 同构方便(不同端的支持),语法简单,可以then或者async await 使用

  • 原生支持率并不高,幸运的是,引入下面这些 polyfill 后可以完美支持 IE8+ :

      1. 由于 IE8 是 ES3,需要引入 ES5 的 polyfill: es5-shim, es5-sham
      1. 引入 Promise 的 polyfill: es6-promise
      1. 引入 fetch 探测库:fetch-detector
      1. 引入 fetch 的 polyfill: fetch-ie8
      1. 可选:如果你还使用了 jsonp,引入 fetch-jsonp
      1. 可选:开启 Babel 的 runtime 模式,现在就使用 async/await
  • Fetch 请求默认是不带 cookie 的,需要设置 fetch(url, {credentials: 'include'})

  • 服务器返回 400,500 错误码时并不会 reject,只有网络错误这些导致请求不能完成时,fetch 才会被 reject。

  • IE不支持,使用的XHR模拟,但是IE8, 9 的 XHR 不支持 CORS 跨域

  • fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject的实现的超时控制并不能阻止请求过程继续在后台运行,造成了流量的浪费

  • fetch没有办法原生监测请求的进度,而XHR可以

  • fetch中可以设置mode

    • “same-origin” 只有来自同域的请求才能成功,其它的均将被拒绝。
    • “cors” 允许不同域的请求,但要求有正确的 CORs 头信息。
    • “cors-with-forced-preflight” 在执行真正的调用前先执行preflight check
    • “no-cors” 目前这种模式是无法执行的。(不跨域)

axios

  • 可以在 node.js 创建 http 请求
  • 支持 Promise API
  • 客户端支持防止CSRF
  • 提供了一些并发请求的接口(重要,方便了很多的操作)

ajax

  • ajax需要send和open,不符合promise 规范

相关文章

网友评论

      本文标题:fetch 和 ajax 和 axios

      本文链接:https://www.haomeiwen.com/subject/qbgpictx.html