ES6-fetch
fetch
事实标准,并不存在与ES6规范中,基于Promise实现。
目前项目中对Promise的兼容性尚存在问题,如果在项目中应用fetch,需要引入es6-promise和fetch。
fis3中可以通过fis3 install es6-promise和fis3 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-Cookie和Set-Cookie2。cors:Response从一个合法的跨域请求获得,一部分header和body可读。error:网络错误。Response的status是0,Headers是空的并且不可写。当Response是从Response.error()中得到时,就是这种类型。opaque: Response从"no-cors"请求了跨域资源。依靠Server端来做限制。
url
- 返回完整的url字符串。如:'http://xxx.com/xx?a=1'
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的更多相关文章
- ES6 fetch函数与后台交互
最近在学习react-native,遇到调用后端接口的问题.看了看官方文档,推荐使用es6的fetch来与后端进行交互,在网上找了一些资料.在这里整理,方便以后查询. 1.RN官方文档中,可使用XML ...
- ES6 Fetch API HTTP请求实用指南
本次将介绍如何使用Fetch API(ES6 +)对REST API的 HTTP请求,还有一些示例提供给大家便于大家理解. 注意:所有示例均在带有箭头功能的 ES6中给出. 当前的Web /移动应用程 ...
- ES6 fetch方法封装
// 请求路径 let url = 'http://jsonplaceholder.typicode.com/users' // 传输数据参数 const dataName = { name: &qu ...
- es6 fetch方法请求接口
fetch(url, { method: 'post', headers: { 'Content-type': 'application/x-www-form-urlencoded; charset= ...
- 【原】redux异步操作学习笔记
摘要: 发觉在学习react的生态链中,react+react-router+webpack+es6+fetch等等这些都基本搞懂的差不多了,可以应用到实战当中,唯独这个redux还不能,学习redu ...
- 新一代的json--fetch
fetch( "http://jsontest.bceapp.com/hi", { method:"POST", mode:"core", ...
- 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 ...
- ES6中Fetch的封装及使用,炒鸡简单~
之前写过一篇<ajax.axios.fetch之间的详细区别以及优缺点> 戳这里 1.封装 (http.js) class Ajax { get(url) { return new Pro ...
- ES6使用fetch请求数据
ie是完全不支持fetch的. fetch(url,{method:"get/post"}).then(res=>{ }) 如果请求返回的status是200,body是 ...
- 用ES6和fetch封装网络请求
导读: fetch: 这个方法是ES2017中新增的特性,这个特性出来后给人一种传统ajax已死的感觉,其实它的作用是替代浏览器原生的XMLHttpRequest异步请求,我们在日常的开发中,基本不会 ...
随机推荐
- Windows里如何正确安装Zookeeper以服务运行(博主推荐)(图文详解)
不多说,直接上干货! 为什么要在Win下来安装Zookeeper呢? 其实玩过大数据的人很清楚,在Linux下我更不说了.在win下,如Disconf .Dubbo等应用. 所以,它的应用是非常广的. ...
- javac之Inferring Type Arguments Based on Actual Arguments
We use the following notational conventions in this section: Type expressions are represented using ...
- C++11中多线程库
一.Linux 线程API 线程是在操作系统层面支持的,所以多线程的学习建议还是先找一本linux系统编程类的书,了解linux提供线程的API,了解使用线程设计程序的基本操纵.完全使用系统调用编写多 ...
- Linux时间命令
Linux一般有系统时间和硬件时间之分,date命令是显示和操作系统时间:hwclock用来操作硬件时间(日期).日期和时间很重要,比如错误的日期和时间会导致你不能编译程序. 1 date 用法: ...
- Verdi文档路径
1.echo $VERDI_HOME 2.cd $VERDI_HOME/doc 3.okular VerdiTut.pdf& Verdi主要在以下方面使用 Verdi使用情形: ...
- NoSQL数据库--简介
一.What's NoSQL? NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库.这类数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的.原始的目的是为了大规模we ...
- spring boot 2.0 源码分析(四)
在上一章的源码分析里,我们知道了spring boot 2.0中的环境是如何区分普通环境和web环境的,以及如何准备运行时环境和应用上下文的,今天我们继续分析一下run函数接下来又做了那些事情.先把r ...
- 纯Java JDBC连接数据库,且用JDBC实现增删改查的功能
Java JDBC连接数据库 package cn.cqvie.yjq; import java.sql.*; /** * 注册数据库的驱动程序,并得到数据库的连接对象 * @author yu * ...
- java SE 入门之运算符(第三篇)
在 java 中主要有以上运算符,分为 赋值运算符 ,算术运算符.关系运算符(比较运算符),逻辑运算符和三目运算符(三元运算符). 我们一起来学习下吧! 一.赋值运算符 赋值运算符主要有五个.分别是 ...
- RegExp正则表达式——更深层次解析
转自:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp RegExp 构造 ...