美文网首页
Fetch API学习笔记

Fetch API学习笔记

作者: EL_PSY_CONGROO | 来源:发表于2018-02-09 15:19 被阅读0次

Fetch API学习笔记

Fetch是一个现代的概念, 等同于 XMLHttpRequest。它提供了许多与XMLHttpRequest相同的功能,但被设计成更具可扩展性和高效性。

示例

Fetch API中,最常用的就是fetch()函数。它接收一个URL参数,返回一个promise来处理responseresponse参数带着一个Response对象。

fetch("/data.json").then(function(res) {
  // res instanceof Response == true.
  if (res.ok) {
    res.json().then(function(data) {
      console.log(data.entries);
    });
  } else {
    console.log("Looks like the response wasn't perfect, got status", res.status);
  }
}, function(e) {
  console.log("Fetch failed!", e);
});

Fetch引入了3个接口,它们分别是 Headers,Request 以及 Response 。他们直接对应了相应的HTTP概念,但是基于安全考虑,有些区别,例如支持CORS规则以及保证cookies不能被第三方获取。

Headers

Headers接口是一个简单的多映射的名-值表:

var content = "Hello World";
var reqHeaders = new Headers();
reqHeaders.append("Content-Type", "text/plain");
reqHeaders.append("Content-Length", content.length.toString());
reqHeaders.append("X-Custom-Header", "ProcessThisImmediately");

也可以传一个多维数组或者json

reqHeaders = new Headers({
  "Content-Type": "text/plain",
  "Content-Length": content.length.toString(),
  "X-Custom-Header": "ProcessThisImmediately",
});

Headers的内容可以被检索:

console.log(reqHeaders.has("Content-Type")); // true
console.log(reqHeaders.has("Set-Cookie")); // false
reqHeaders.set("Content-Type", "text/html");
reqHeaders.append("X-Custom-Header", "AnotherValue");

console.log(reqHeaders.get("Content-Length")); // 11
console.log(reqHeaders.getAll("X-Custom-Header")); // ["ProcessThisImmediately", "AnotherValue"]

reqHeaders.delete("X-Custom-Header");
console.log(reqHeaders.getAll("X-Custom-Header")); // []

Request

Request接口定义了通过HTTP请求资源的request格式。

最简单的 Request 是一个URL,可以通过URLGET一个资源。

var req = new Request("/index.html");
console.log(req.method); // "GET"
console.log(req.url); // "http://example.com/index.html"

URL以外的其他属性的初始值能够通过第二个参数传给Request构造函数。这个参数是一个json

var uploadReq = new Request("/uploadImage", {
  method: "POST",
  headers: {
    "Content-Type": "image/png",
  },
  body: "image data"
});

mode属性用来决定是否允许跨域请求,以及哪些response属性可读。可选的mode属性值为same-originno-cors(默认)以及cors

  • same-origin模式:如果一个请求是跨域的,那么返回一个简单的error,这样确保所有的请求遵守同源策略。
  • no-cors模式允许来自CDN的脚本、其他域的图片和其他一些跨域资源,但是首先有个前提条件,就是请求的method只能是HEAD,GET或者POST
  • cors模式我们通常用作跨域请求来从第三方提供的API获取数据。

Response

Response实例通常在fetch()的回调中获得。

Response中最常见的成员:

  • status:默认值为200
  • status Text:默认值为OK
  • ok:当status2xx时它的值为true

这篇学习笔记参考这个API很“迷人”——(新的Fetch API)),有的部分没有立即理解,留待实践之后回头补充。

相关文章

网友评论

      本文标题:Fetch API学习笔记

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