fetch api出来很多年了 ,由于兼容性问题之前一直没在项目中用到,最近做的项目只需兼容IE9+,把fetch引入了进来。目前用起来感觉挺好的,简洁。

fetch 返回值是promise对象,对于不支持promise的需要引入promise-polyfill: https://www.npmjs.com/package/es6-promise-polyfill 。 对于不支持fetch的需要引入fetch-polyfill :https://github.com/github/fetch

由于fetch不支持jsonp, 如果需要使用jsonp, 可以引入fetch-jsonp :https://github.com/camsong/fetch-jsonp, 其使用方式和fetch基本一样。

//最简单的使用方式:fetch(url, [options]), 对于get请求,参数需添加到url后面
fetch(url).then((response) => response.json()).then((response) => { console.log(response)})

fetch请求提供了非常灵活的配置

1. 直接在options配置

options.method //GET, POST, PUT, DELETE, HEAD
options.headers =
{
// 'Access-Control-Allow-Origin': '*',
// 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' //application/json
// 'Content-Type': 'multipart/formdata; charset=UTF-8' //application/json
},
options.credentials=include //允许请求发送cookie
options.body = new FormData(form)  //post请求
options.body = JSON.stringify(params) //post请求

2. 使用 new Headers()创建请求头

let myHeaders = new Headers();

myHeaders.append('Content-Type', 'text/xml');

myHeaders.append('Custom-Header', 'CustomVal');

myHeaders.has('Content-Type');//true

myHeaders.get('Content-Type');//text/xml

myHeaders.set('Content-Type', 'application/json');

myHeaders.delete('Custom-Header');

//或直接以参数的形式创建

let myHeaders = new Headers({
'Content-Type': 'application/json'
});

创建一个Request 对象来包装请求头:

var myRequest = new Request(url,{
headers:new Headers({ })
}); fetch(myRequest).then((response)=>response.json)

可以发现fetch和Request参数基本一致,可以通过 Request() 和 Response() 的构造函数直接创建请求和响应,但是不建议这么做。他们应该被用于创建其他 API 的结果(mdn上说的)

3. 响应

Response 代表响应,fetch 的then 方法接受一个Response实例

response提高了很多属性和方法,https://developer.mozilla.org/zh-CN/docs/Web/API/Response

其中经常会用到response.json() /response.text() ,返回一个promise对象。

let fetchFn = function (opts) {
let options = {
url : '', // 路径
method : 'GET',
params: { },
headers : {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
success(){},
error(){}
};
options = extend(options, opts);
let fetchParams = {
method: options.method,
headers: options.headers,
credentials : 'include' //允许发送cookie
}
if (options.method == 'GET'){
options.url = toUrlParams(options.url, options.params); // 将参数拼接在url后面
}else{
fetchParams.body = JSON.stringify(options.params);
if (options.form){
fetchParams.body = new FormData(options.form)
}
}
fetch(opts.url, fetchParams).then(response => response.json()).then(result => {
if (result.code == 0){
options.success(result);
}else{
options.error(result);
}
}).catch(e =>{
console.log(' failed:', e)
});
}

参考文档:

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

http://www.cnblogs.com/hsprout/p/5504053.html

http://web.jobbole.com/84924/

https://segmentfault.com/a/1190000003810652

fetch 使用记录的更多相关文章

  1. Rest风格WEB服务(Rest Style Web Service)的真相

    http://blog.csdn.net/jia20003/article/details/8365585 Rest风格WEB服务(Rest Style Web Service)的真相 分类: J2E ...

  2. zabbix统一脚本监控方式

    几周的zabbix使用之后几点心得,暂时记在这儿 简单命令监控,直接配置Userparameter参数,以应用来分类conf文件,将不同应用的配置写在不同的conf文件里,并将之放到统一的配置引入目录 ...

  3. MySQL存储过程学习笔记

    MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣.MySQL 5.0终于开始支持存储过程了. MySQL的关键字大小写通用.该学习笔记对关键字使用大写:变量名,表名使用小写. ...

  4. Pro*C介绍

    内嵌SQL 概要 Pro*C语法 SQL 预处理指令 语句标号 宿主变量 基础 指针 结构 数组 指示器变量 数据类型同等化 动态SQL 事务 错误处理 SQLCA WHENEVER语句 Demo程序 ...

  5. SublimeText3 编辑器使用小结

    1. 快捷键: Command + shift + D : 复制当前行 Command + shift + K : 删除当前行 Command + J : 合并一行 Command + Enter : ...

  6. 何时会发生db file sequential read等待事件?

    很多网友对系统内频繁发生的db file sequential read等待事件存有疑问,那么到底在那些场景中会触发该单块读等待事件呢? 在我之前写的一篇博文<SQL调优:Clustering ...

  7. MySQL 04

    目录 python操作mysql mysql sql注入问题 问题描述 解决办法 增/删/改 查询 索引 基本概念 索引的原理 mysql索引种类 普通索引 唯一索引 联合索引 创建索引 正确使用索引 ...

  8. SQLAlchemy(4)

    结果查询 上节课使用query从数据库中查询到了结果,但是query返回的对象是直接可用的吗? 首先导入模块 from connect import session from user_modules ...

  9. PL/SQL编程急速上手

    结构化查询语言(SQL)是第四代编程语言的典型,这种命令式的语言更像一种指令,使用它,你只需要告诉计算机“做什么”,而不用告诉计算机“怎么做”.第四代编程语言普遍具有简单.易学.能更快的投入生产等优点 ...

随机推荐

  1. Garmin APP开发之入门

    Garmin开发-入门 先附上几个已经开发完成的app日历 up down 翻月 start 回到当前月(就差农历了) 秒表和定时器一体app界面比较简单,但是实用,长按菜单键可以切换秒表和定时器,有 ...

  2. 【作业留存】根据IATF框架,设计的一种中小型企业安全拓扑

  3. linux 命令——41 ps(转)

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  4. IOS CALayer基本使用 (图层)

    ● 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层(CALayer) ● 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView 的l ...

  5. 简析平衡树(一)——替罪羊树 Scapegoat Tree

    前言 平衡树在我的心目中,一直都是一个很高深莫测的数据结构.不过,由于最近做的题目的题解中经常出现"平衡树"这三个字,我决定从最简单的替罪羊树开始,好好学习平衡树. 简介 替罪羊树 ...

  6. 题解 P4613 【[COCI2017-2018#5] Olivander】

    话说这道题,作为一个哈迷,是不能错过的 我很惊讶本蒟蒻竟然看得懂题面 好了,闲话少说,这道题,虽说是入门难度,但凭着良心说,它还是一道普及 - 的吧 看到标签,“高性能”,大脑的第一反应是快读. 是不 ...

  7. 使用U盘引导安装CentOS

    一.制作linux引导盘 1. 格式化U盘:格式成FAT32格式 2. 安装syslinux https://www.kernel.org/pub/linux/utils/boot/syslinux/ ...

  8. Spring Boot 2.x零基础入门到高级实战教程

    一.零基础快速入门SpringBoot2.0 1.SpringBoot2.x课程全套介绍和高手系列知识点 简介:介绍SpringBoot2.x课程大纲章节 java基础,jdk环境,maven基础 2 ...

  9. Vim编辑器基础命令

    Linux系统中都默认安装了vi或vim编辑器,两种命令基本一致.vim为Vi IMproved,功能更强大. vim有命令模式,输入模式,和末行模式三种. ➢ 命令模式:控制光标移动,可对文本进行复 ...

  10. 使用Maven开发一个简单的SpringData

    1:创建Maven项目 2:添加依赖(修改pom.xml为以下代码) <project xmlns="http://maven.apache.org/POM/4.0.0" x ...