Fetch API

一 简介

Ajax操作所用的XMLHttpRequest对象,已有十多年历史,其API设计并不是很好,输入、输出、状态都在同一个接口管理,容易写出混乱的代码。

Fetch API是一种新规范,用来取代XMLHttpRequest对象。

Fetch API相比于Ajax的优点

它主要有两个特点,一是接口合理化,Ajax是将所有不同性质的接口都放在XHR对象上,而Fetch是将它们分散在几个不同的对象上,设计更合理;二是Fetch操作返回Promise对象,避免了嵌套的回调函数

Fetch API最大的特点:除了返回Promise对象,还有一点就是数据传送是以数据流(stream)的形式进行的。对于大文件,数据是一段一段得到的。

二 使用

fetch挂载在window全局对象上,所以可以用以下代码检查浏览器是否部署了Fetch API:

if ("fetch" in window){
  // 支持
} else {
  // 不支持
}

一个Fetch API进行请求的简单例子:

fetch(url).then((response) => {
  console.log(response.json()); //通过response.json()可以获取到请求返回的json数据
},(error)=>{
  console.log(error);
});

上面代码向指定URL发请求,得到回应后将其转为JSON格式,输出到控制台。如出错,则输出一条提示信息。注意,fetch方法返回的是一个Promise对象。

其他细节

Fetch API引入三个新的对象(也是构造函数):Headers, Request和Response。(Request对象和Response对象都有body属性,表示请求的内容。)

比如请求传参数,就把参数加到body里,如:

浏览器不支持的解决方案

移动端的浏览器可能不支持(window.fetch找不到),可以使用fetch库来支持: https://github.com/github/fetch

参考

已学习

《JavaScript 标准参考教程(alpha)》,by 阮一峰

待学习

MDN-Fetch API https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API

results matching ""

    No results matching ""