fetch 基本使用(使用fetch、axios来替代ajax)

摘要:
如果请求图片,使用response.blob方法注意:cookie传递必须在header参数里面加上credentials:'include',才会如xhr一样将当前cookies带到请求中去四、get、post请求方式1、getvarresult=fetch;2、postvarresult=fetch;五、封装get和post方法 1、getimport'es6-promise'import'whatwg-fetch'exportdefault=˃2、postimport'es6-promise'import'whatwg-fetch'importqsfrom'qs';exportdefault=˃六、fetch与axios的区别axios("http://xxx/xxx.json?

一、fetch

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

二、安装

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

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

三、fetch的基本使用

复制代码
npm install whatwg-fetch --save
npm install es6-promise --save
import '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、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、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 基本使用(使用fetch、axios来替代ajax)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇关于微软Silverlight,你应该知道的10件事自定义滚动条样式jquery.tinyscrollbar.min.js 插件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL 如何存储长度较大的varchar与blob

本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/96 最近,在工作中遇到了MySQL中如何存储长度较长的字段类型问题,于是花了一周多的时间抽空学习了一下,并且记录下来。 MySQL大致的逻辑存储结构在这篇文章中有介绍,做为基本概念:InnoDB 逻辑存储结构 注:文中所...

图片处理渐变

  在网上看到一个关于图片处理的文章,用vb写的,翻译出来学习一下。    在使用ASP的时候,我们时常要借助第三方控件来实现一些图象功能。而现在,ASP.NET的推出,我们已经没有必要再使用第三方控件来实现,因为ASP.NET 已经具有强大的功能来实现一些图象处理。现在,我们就来看看怎样使用ASP.NET的这一强大功能。      一、System.Dr...

CORS漏洞的学习与分析

同源策略         同源策略(Same origin policy)是一种约定,一种非常重要的安全措施,也是最基本的安全功能,它禁止了来自不同源的脚本对当前页面的读取或修改,从而限制了跨域访问甚至修改资源,防止出现A页面可以随意更改B页面信息这样子的极其糟糕的情况发生。   同源策略做了怎样的限制呢?怎样才会被认为是跨域的,不同源的呢? 以http:...

Django-rest-framework --- 总结

目录 drf回顾总结 drf基础知识点 1.drf框架安装 安装 drf框架规矩的封装风格 drf请求生命周期 2.接口 3.restful接口规范 4.基于restful规范的原生Django接口 主路由:url.py api组件的子路由:api/url.py 模型层:model.py 后台层:admin.py 数据库迁移 视图层:vi...

ajax发送请求下载字节流形式的excel文件

背景 开发项目中导出功能,因为数据量有点大,所以导出可能需要时间有点长,所以想用ajax异步请求。 存在问题 利用传统的js和jquery提供的ajax相关获取响应的方式是无法实现excel文件下载的。 js的XMLHttpRequest对象提供了responseText和responseXML两个属性,获取的是html和xml文件格式,没有提供二进制流获...

highcharts(数据可视化框架),ajax传递数据问题

1.引入 Highcharts 注意用什么功能就按照官方引用对应的js <%--highcharts视图js--%> <script src="/js/Highcharts/code/highcharts.js"></script> <script src="/js/Highcharts/code/...