一、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. centos7.4出现yum command not found

    购买的云服务器运行yum命令出现yum command not found. 通过将云主机自带的yum和python卸载掉,并且同时需要关注/usr/bin/yum文件的首行解释.我定义其为" ...

  2. 修改IDEAL 快捷键风格

    选择File------Setting-----进入到设置窗口-------keymap--------选择自己适应的快捷键风格 选择Eclipse后Ideal的快捷键就和Eclipse相同

  3. pcntl_fork()函数说明

    pcntl_fork()函数复制了当前进程的PCB,并向父进程返回了派生子进程的pid,父子进程并行,打印语句的先后完全看系统的调度算法,打印的内容控制则靠pid变量来控制.因为我们知道pcntl_f ...

  4. 从库因为sql错误导致主从同步被中断的问题解决

    从库因为sql错误导致主从同步被中断的问题解决:show slave status\G;看lasterror:看延迟多少秒,正常情况下是没有延迟的. 跳过错误的那条sql:SET GLOBAL SQL ...

  5. js 匿名函数 js-函数定义方法

    1.任何函数都是有返回值的,没有返回值的,在某些语言里称之为过程例如PL/SQL 2.js中的函数如果没有return 关键字指明给出的返回值,那么当调用完函数后,会返回“undefined" ...

  6. vs 扩展和更新下载的插件在什么位置呢,看看吧,哈哈

    C:\Users\Administrator\AppData\Local\Microsoft\VisualStudio\10.0\Extensions,注意哈,这个AppData是隐藏的哟,要显示才能 ...

  7. Bulid过程中中遇到的问题UnityEditor.BuildPlayerWindow+BuildMethodException: '' is an incorrect path for a scene file. BuildPlayer expects paths relative to the project folder.

    今天,在Bulid的过程中,遇到了一个错误“ UnityEditor.BuildPlayerWindow+BuildMethodException: '' is an incorrect path f ...

  8. 配置zabbix监控windows,cmd运行报错cannot connect to Service Manager: [0x00000005]

    错误原因: cmd运行没有管理员权限 解决: 找到cmd.exe的位置C:\Windows\System32,选中--右键--使用管理员身份运行 再通过cmd进入到zabbix_agentd文件夹进行 ...

  9. 玩转ELK之三件套安装配置详解

    ELK是啥子??? ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearch.Logstash 和 Kibana. 特点: 收集 ...

  10. shell脚本执行出现“期待整数表达式”

    在执行shell时一直出现“integer expression expected”,找了很久也没发现那个地方出错.翻了笔记发现-le并不错啊,甚至还怀疑零是不是整数还特意上网搜了下 -_- . 最后 ...