Fetch API

Fetch API 提供了能够用于操作一部分 HTTP 管道的 JavaScript 接口,比如 requests 和 responses。它同时也提供了一个全局的 fetch() 方法——能够简单的异步的获取资源

浏览器支持情况

功能检测

通过检测 Headers、Request、Response 或 fetch() 是否在 Window 或 Worker 域中

if(self.fetch) {
    // run my fetch request here
} else {
    // do something with XMLHttpRequest?
}

具体分析

fetch api包含了四个接口,如下:

GlobalFetch

GlobalFetch包含了一个Fetch方法,而我们发送请求或者获取资源都需要使用这个方法,而GlobalFetch在很多接口中都被实现了,比如 Window 和 WorkerGlobalScope。所以在各种环境中都可以用这个方法获取到资源。

fetch(URL, {
  method: "POST",
  headers: {
    "Content-Type": "application/x-www-form-urlencoded"
  },
  body: "firstName=Nikhil&favColor=blue&password=easytoguess"
}).then(function(res) {
  if (res.ok) {
    alert("Perfect! Your settings are saved.");
  } else if (res.status == 401) {
    alert("Oops! You are not authorized.");
  }
}, function(e) {
  alert("Error submitting form!");
});

Headers

Headers类允许你去对HTTP request和response headers执行各种操作。 这些操作包括:检索, 设置, 添加和删除。

由于Headers可以在request请求中被发送或者在response请求中被接收,并且规定了哪些参数是可写的,Headers对象有一个特殊的guard属性。这个属性没有暴露给Web,但是它影响到哪些内容可以在Headers对象中被改变。 可能的值如下:

Request

相当于一个资源请求

Response

呈现了对一次请求的响应数据, Response实例通常在fetch()的回调中获得。但是它们也可以用JS构造,不过通常这招只用于ServiceWorkers。

其它注意点

总结与XMLHttpRequest的区别

一些不足

参考文献