fetch

事实标准,并不存在与ES6规范中,基于Promise实现。

目前项目中对Promise的兼容性尚存在问题,如果在项目中应用fetch,需要引入es6-promisefetch

fis3中可以通过fis3 install es6-promisefis3 install fetch进行安装。

以下提到为了浏览器兼容而引入的fech组件时统一使用'fech组件'代替。

该文档重点针对fetch组件进行详细说明。

相关概念

  • Request、Response、Header、Body:事实标准中暴露在window对象中,但在fetch组件中没有对外暴露接口,项目中不能使用,因此暂不做深入了解。在RN中可以直接使用
  • 返回Promise对象

基本用法

  • get
fetch('/test/content.json').then(function(data){
return data.json();
}).then(function(data){
console.log(data);
}).catch(function(error){
console.log(error);
});
  • post
fetch('/test/content.json', { // url: fetch事实标准中可以通过Request相关api进行设置
method: 'POST',
mode: 'same-origin', // same-origin|no-cors(默认)|cors
credentials: 'include', // omit(默认,不带cookie)|same-origin(同源带cookie)|include(总是带cookie)
headers: { // headers: fetch事实标准中可以通过Header相关api进行设置
'Content-Type': 'application/x-www-form-urlencoded' // default: 'application/json'
},
body: 'a=1&b=2' // body: fetch事实标准中可以通过Body相关api进行设置
}).then(function(res){ res: fetch事实标准中可以通过Response相关api进行设置
return res.json();
}).then(function(data){
console.log(data);
}).catch(function(error){ });

Response相关属性及方法

bodyUsed

  • 标记返回值是否被使用过
  • 这样设计的目的是为了之后兼容基于流的API,让应用一次消费data,这样就允许了JavaScript处理大文件例如视频,并且可以支持实时压缩和编辑
fetch('/test/content.json').then(function(res){
console.log(res.bodyUsed); // false
var data = res.json();
console.log(res.bodyUsed); //true
return data;
}).then(function(data){
console.log(data);
}).catch(function(error){
console.log(error);
});

headers

  • 返回Headers对象,该对象实现了Iterator,可通过for...of遍历
fetch('/test/content.json').then(function(res){
var headers = res.headers;
console.log(headers.get('Content-Type')); // application/json
console.log(headers.has('Content-Type')); // true
console.log(headers.getAll('Content-Type')); // ["application/json"]
for(let key of headers.keys()){
console.log(key); // datelast-modified server accept-ranges etag content-length content-type
}
for(let value of headers.values()){
console.log(value);
}
headers.forEach(function(value, key, arr){
console.log(value); // 对应values()的返回值
console.log(key); // 对应keys()的返回值
});
return res.json();
}).then(function(data){
console.log(data);
}).catch(function(error){
console.log(error);
});

ok

  • 是否正常返回
  • 代表状态码在200-299之间

status

  • 状态码

    • 200 成功

statusText

  • 状态描述

    • 'OK' 成功

type

  • basic:正常的,同域的请求,包含所有的headers。排除Set-CookieSet-Cookie2
  • cors:Response从一个合法的跨域请求获得,一部分header和body可读。
  • error:网络错误。Response的status是0,Headers是空的并且不可写。当Response是从Response.error()中得到时,就是这种类型。
  • opaque: Response从"no-cors"请求了跨域资源。依靠Server端来做限制。

url

arrayBuffer()

  • 返回ArrayBuffer类型的数据的Promise对象

blob()

  • 返回Blob类型的数据的Promise对象

clone()

  • 生成一个Response的克隆
  • body只能被读取一次,但clone方法就可以得到body的一个备份
  • 克隆体仍然具有bodyUsed属性,如果被使用过一次,依然会失效
fetch('/test/content.json').then(function(data){
var d = data.clone();
d.text().then(function(text){
console.log(JSON.parse(text));
});
return data.json();
}).then(function(data){
console.log(data);
}).catch(function(error){
console.log(error);
});

json()

  • 返回JSON类型的数据的Promise对象

text()

  • 返回Text类型的数据的Promise对象

formData()

  • 返回FormData类型的数据的Promise对象

缺陷

  • 无法监控读取进度
  • 无法中断请求

ES6-fetch的更多相关文章

  1. ES6 fetch函数与后台交互

    最近在学习react-native,遇到调用后端接口的问题.看了看官方文档,推荐使用es6的fetch来与后端进行交互,在网上找了一些资料.在这里整理,方便以后查询. 1.RN官方文档中,可使用XML ...

  2. ES6 Fetch API HTTP请求实用指南

    本次将介绍如何使用Fetch API(ES6 +)对REST API的 HTTP请求,还有一些示例提供给大家便于大家理解. 注意:所有示例均在带有箭头功能的 ES6中给出. 当前的Web /移动应用程 ...

  3. ES6 fetch方法封装

    // 请求路径 let url = 'http://jsonplaceholder.typicode.com/users' // 传输数据参数 const dataName = { name: &qu ...

  4. es6 fetch方法请求接口

    fetch(url, { method: 'post', headers: { 'Content-type': 'application/x-www-form-urlencoded; charset= ...

  5. 【原】redux异步操作学习笔记

    摘要: 发觉在学习react的生态链中,react+react-router+webpack+es6+fetch等等这些都基本搞懂的差不多了,可以应用到实战当中,唯独这个redux还不能,学习redu ...

  6. 新一代的json--fetch

    fetch( "http://jsontest.bceapp.com/hi", { method:"POST", mode:"core", ...

  7. Atitit  Uncaught (in promise) SyntaxError Unexpected token < in JSON at position 0

    Atitit  Uncaught (in promise) SyntaxError  Unexpected token < in JSON at position 0  Uncaught (in ...

  8. ES6中Fetch的封装及使用,炒鸡简单~

    之前写过一篇<ajax.axios.fetch之间的详细区别以及优缺点> 戳这里 1.封装 (http.js) class Ajax { get(url) { return new Pro ...

  9. ES6使用fetch请求数据

    ie是完全不支持fetch的. fetch(url,{method:"get/post"}).then(res=>{   }) 如果请求返回的status是200,body是 ...

  10. 用ES6和fetch封装网络请求

    导读: fetch: 这个方法是ES2017中新增的特性,这个特性出来后给人一种传统ajax已死的感觉,其实它的作用是替代浏览器原生的XMLHttpRequest异步请求,我们在日常的开发中,基本不会 ...

随机推荐

  1. 【Java并发编程】:生产者—消费者模型

    生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据. 这里实现如下情况的生产--消费模型: 生产者不断交替地生产两组数据“姓 ...

  2. Python -- Windows编程 -- 注册表

    1.查询开机自启项 startUp.py import re import win32api, win32con def GetValues(fullname): #分割出基本项name[0] nam ...

  3. 二叉查找树 Java实现

    定义: 一棵二叉查找树是一棵二叉树,每个节点都含有一个Comparable的键(以及对应的值). 每个节点的键都大于左子树中任意节点的键而小于右子树中任意节点的键. 树的术语: Name Functi ...

  4. 使用vue2+Axios+Router 之后的总结以及遇到的一些坑

    构建 vue有自己的脚手架构建工具vue-cli,使用起来非常方便,使用webpack来集成各种开发便捷工具,比如: 代码热更新,修改代码之后网页无刷新改变,对前端开发来说非常的方便 PostCss, ...

  5. Spark2.3.1中用各种模式来跑官方Demo

    1  使用单机local模式提交任务 local模式也就是本地模式,也就是在本地机器上单机执行程序.使用这个模式的话,并不需要启动Hadoop集群,也不需要启动Spark集群,只要有一台机器上安装了J ...

  6. 生产环境部署node记录(一)

    云服务器厂商:京东云 我选择的操作系统为公共镜像CentOS7.2. 步骤: 首先登陆服务器:使用ssh 用户名@IP地址  登陆 1. wget命令下载Node.js安装包 登陆node的官网复制下 ...

  7. SQLAlchemy之SQL Expression

    SQLAlchemy是一个强大的Python SQL工具箱, 提供了包括ORM在内的各种支持. 首先使用pip安装; pip install SQLAlchemy SQL Expression Lan ...

  8. QlikView sheet权限

    最近遇到了个新问题,需要针对不同的sheet设置不同的权限,具体是用户登录不同账户,可以看到统一文档的不同sheet 对于Qlikview权限设置就不做描述,下面直接进行sheet操作 第一步,打开脚 ...

  9. MySQL7:性能优化

    性能优化 优化MySQL数据库是数据库管理员和数据库开发人员的必备技能.MySQL优化,一方面是找出系统的瓶颈,提高MySQL数据库的整体性能:一方面需要合理的结构设计和参数调整,以提高用户操作响应的 ...

  10. npm saveError ENOENT: no such file or directory

    1.报错情况 在执行npm install xxx时,出现如下:npm WARN saveError ENOENT: no such file or directory, open '/nodetes ...