XMLHttpRequest的最新替代技术——Fetch API

XMLHttpRequest 是一个设计粗糙的 API,不符合关注分离的原则,配置和调用方式非常混乱,而且基于事件的异步模型写起来也没有现代的 Promise,generator/yield,async/await 友好。

  • 使用 XHR 发送一个 json 请求一般是这样:

    var xhr = new XMLHttpRequest();
    xhr.open('GET', url);
    xhr.responseType = 'json';
    
    xhr.onload = function() {
        console.log(xhr.response);
    };
    
    xhr.onerror = function() {
        console.log("Oops, error");
    };
    
    xhr.send();
    
  • 使用 Fetch 后,顿时看起来好一点

    fetch(url).then(response => response.json())
    .then(data => console.log(data))
    .catch(e => console.log("Oops, error", e))
    

现在看起来好很多了,但这种 Promise 的写法还是有 Callback 的影子,而且 promise 使用 catch 方法来进行错误处理的方式有点奇怪。不用急,下面使用 async/await 来做最终优化:

  try {
      let response = await fetch(url);
      let data = response.json();
      console.log(data);
  } catch(e) {
      console.log("Oops, error", e);
  }

总结一下,Fetch 优点主要有:

  1. 语法简洁,更加语义化

  2. 基于标准 Promise 实现,支持 async/await

  3. 同构方便,使用 isomorphic-fetch

Fetch 常见坑:

  1. Fetch 请求默认是不带 cookie 的,需要设置 fetch(url, {credentials: 'include'})
  2. 服务器返回 400,500 错误码时并不会 reject,只有网络错误这些导致请求不能完成时,fetch 才会被 reject。

文章摘自 [传统 Ajax 已死,Fetch 永生]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JavaScript 通过XMLHttpRequest(XHR)来执行异步请求,这个方式已经存在了很长一段时间。虽...
    Bruce_zhuan阅读 2,521评论 1 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,288评论 19 139
  • 原谅我做一次标题党,Ajax 不会死,传统 Ajax 指的是 XMLHttpRequest(XHR),未来现在已被...
    9a9Hbx阅读 15,067评论 17 161
  • 原谅我做一次标题党,Ajax 不会死,传统 Ajax 指的是 XMLHttpRequest(XHR),未来现在已被...
    茶艺瑶阅读 1,339评论 0 4
  • 维年日月,椿庭灯暗,飞鹤声哀。先考魂归帝乡,永隔幽明。不孝男康召衔哀忍痛,谨具时馐之奠,致祭吾父灵前: 先考讳戊寅...
    漂浮在世阅读 835评论 0 0