一、fetch

fetch是一种XMLHttpRequest的一种替代方案,在工作当中除了用ajax获取后台数据外我们还可以使用fetch、axios来替代ajax

二、安装

执行npm install whatwg-fetch --save即可安装。

为了兼容老版本浏览器,还需要安装npm install es6-promise --save

三、fetch的基本使用

npm install whatwg-fetch --savenpm install es6-promise --saveimport 'es6-promise'import 'whatwg-fetch'
fetch(url,options).then((res)=>{ console.log(res);},function(err){ console.log(err)})

说明:

1、fetch的返回值是一个promise对象

2、options

method:HTTP请求方式,默认是GET

body:请求的参数

fetch('/xxx', {

method: 'post',

body:'username=zhangsan&age=17'

});

headers:HTTP请求头

因为一般使用JSON数据格式,所以设置ContentType为application/json

credentials:默认为omit,忽略的意思,也就是不带cookie还有两个参数,same-origin,意思就是同源请求带cookie;include,表示无论跨域还是同源请求都会带cookie

3、在.then里面第一个回调函数中处理response

status(number): HTTP返回的状态码,范围在100-599之间

statusText(String): 服务器返回的状态文字描述

headers: HTTP请求返回头

body: 返回体,这里有处理返回体的一些方法

text(): 将返回体处理成字符串类型

json(): 返回结果和 JSON.parse(responseText)一样

blob(): 返回一个Blob,Blob对象是一个不可更改的类文件的二进制数据

如果请求一个XML格式文件,则调用response.text。如果请求图片,使用response.blob方法

注意:

cookie传递

必须在header参数里面加上credentials: 'include',才会如xhr一样将当前cookies带到请求中去

四、get、post请求方式

1、get

var result = fetch('url', {        credentials: 'include',        headers: {            'Accept': 'application/json, text/plain, */*',        },     });

2、post

var result = fetch('/api/post', {        method: 'POST',        credentials: 'include',        headers: {            'Accept': 'application/json, text/plain, */*',            'Content-Type': 'application/x-www-form-urlencoded'        },        // 注意 post 时候参数的形式        body: "a=100&b=200"    });

五、封装get和post方法

1、http.get()

import 'es6-promise'import 'whatwg-fetch'
export default (url)=>({    var result = fetch(url, { credentials: 'include', headers: { 'Accept': 'application/json, text/plain, */*', },    })   .then(res=>res.json()); return result})

2、http.post

import 'es6-promise'import 'whatwg-fetch'import qs from 'qs';export default (url,data)=>({    var result = fetch(url, {        method: 'POST',        credentials: 'include',        headers: {            'Accept': 'application/json, text/plain, */*',            'Content-Type': 'application/x-www-form-urlencoded'        },        // 注意 post 时候参数的形式        body: qs(data)    })    .then(res=>res.json())        return result;})

六、fetch与axios的区别

axios("http://xxx/xxx.json?a=123'").then((res)=>{     console.log(res)//这里的r是响应结果})
fetch("http://www.baidu.com").then((res)=>{        console.log(res);//是一个综合各种方法的对象,并不是请求的数据})

fetch返回的是一个未处理的方法集合,我们可以通过这些方法得到我们想要的数据类型。如果我们想要json格式,就执行response.json(),如果我们想要字符串就response.text()

axios

1、从浏览器中创建 XMLHttpRequest

2、从 node.js 发出 http 请求

3、支持 Promise API

4、拦截请求和响应

5、转换请求和响应数据

6、自动转换JSON数据

7、客户端支持防止CSRF/XSRF

fetch:

符合关注分离,没有将输入、输出和用事件来跟踪的状态混杂在一个对象里

更加底层,提供的API丰富(request, response)

脱离了XHR,是ES规范里新的实现方式

1、fetchtch只对网络请求报错,对400,500都当做成功的请求,需要封装去处理

2、fetch默认不会带cookie,需要添加配置项

3、fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject的实

现的超时控制并不能阻止请求过程继续在后台运行,造成了量的浪费

4、fetch没有办法原生监测请求的进度,而XHR可以

fetch---基本使用的更多相关文章

  1. Git 少用 Pull 多用 Fetch 和 Merge

    本文有点长而且有点乱,但就像Mark Twain Blaise Pascal的笑话里说的那样:我没有时间让它更短些.在Git的邮件列表里有很多关于本文的讨论,我会尽量把其中相关的观点列在下面. 我最常 ...

  2. git提示:Fatal:could not fetch refs from ....

    在git服务器上新建项目提示: Fatal:could not fetch refs from git..... 百度搜索毫无头绪,最后FQgoogle,找到这篇文章http://www.voidcn ...

  3. sublime 插件推荐: Nettuts+ Fetch

    Nettuts+ Fetch github地址:Nettuts-Fetch 在sublime中直接用 ctrl+shift+P -> pci -> Nettuts-Fetch 即可下载 这 ...

  4. git pull和git fetch的区别

    Git中从远程的分支获取最新的版本到本地有这样2个命令:1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge Git fetch origin master git log ...

  5. Hibernate之加载策略(延迟加载与即时加载)和抓取策略(fetch)

    假设现在有Book和Category两张表,表的关系为双向的一对多,表结构如下: 假设现在我想查询id为2的那本书的书名,使用session.get(...)方法: Session session=H ...

  6. SQL Server 2012提供的OFFSET/FETCH NEXT与Row_Number()对比测试(转)

    原文地址:http://www.cnblogs.com/downmoon/archive/2012/04/19/2456451.html 在<SQL Server 2012服务端使用OFFSET ...

  7. Attempt to fetch logical page (...) in database 2 failed. It belongs to allocation unit xxxx not to xxx

    今天一个同事说在一个生产库执行某个存储过程,遇到了错误: Fatal error 605 occurred at jul 29 2014 我试着执行该存储过程,结果出现下面错误,每次执行该存储过程,得 ...

  8. Fetch:下一代 Ajax 技术

    Ajax,2005年诞生的技术,至今已持续了 10 年.它是一种在客户端创建一个异步请求的技术,本质上它不算创新,是一组技术的组合.它的核心对象是 XMLHttpRequest. 简单回顾下历史 19 ...

  9. 在 JS 中使用 fetch 更加高效地进行网络请求

    在前端快速发展地过程中,为了契合更好的设计模式,产生了 fetch 框架,此文将简要介绍下 fetch 的基本使用. 我的源博客地址:http://blog.parryqiu.com/2016/03/ ...

  10. 解决:error: Cannot fetch repo (TypeError: expected string or buffer)

    同步源码,问题重现: Fetching project platform/external/libopus Fetching project repo error: Cannot fetch repo ...

随机推荐

  1. 关于Jetson Kit开发相关资料

    首先是nVidia官方对于Jetson Kit的介绍: http://www.nvidia.com/object/jetson-tk1-embedded-dev-kit.html https://de ...

  2. win10 Java JDK环境变量配置

    注意下载JDK 版本不需太高(百度一下jdk下载就好了)   第一步 我们首先打开win10电脑的资源管理器,快捷键win+E 然后选中此电脑,鼠标右键在弹出的菜单中选中属性的按钮 第二步 看到窗口的 ...

  3. ehcache快速入门

    前言 JAVA缓存实现方案有很多,最基本的自己使用Map去构建缓存,或者使用memcached或Redis,但是上述两种缓存框架都要搭建服务器,而Map自行构建的缓存可能没有很高的使用效率,那么我们可 ...

  4. mysql left join对于索引不生效的问题

    SELECT t.val, m.username FROM  test.tmp_table AS t LEFT JOIN cehome.uc_members AS m USE INDEX(`mobil ...

  5. html table设置成强制不换行

    在html文件中添加如下代码: <style type="text/css"> table td{word-break: keep-all;white-space:no ...

  6. modbus4j中使用modbus tcp/ip和modbus rtu over tcp/ip模式

    通过借鉴高人博客,总结如下: 1. TcpMaster类,用于生成ModbusMaster主类 package sun.sunboat; public class TcpMaster { privat ...

  7. Eureka启动报错:Failed to load property source from location 'classpath:/application.yml'

    原因: 将application.yml添加到classpath时, 由于变更了application.yml的编码格式(或许也改变了些代码内容), 而target内的yml文件没有实时更新, 从而导 ...

  8. 记录编译<Separable Subsurface Scattering demo>工程遇到的问题

    1. Separable Subsurface Scattering demo 可以从 https://github.com/iryoku/separable-sss 下载下来,但是默认的sln 是 ...

  9. CVPapers - Computer Vision Resource

    To add links (PDF, project,...) you can use the online tool. Computer Vision Paper Indexes ICCV:  20 ...

  10. php display_errors

    // 检测开发环境 public function setReporting() { if (APP_DEBUG === true) { error_reporting(E_ALL); ini_set ...