Fetch API 了解 及对比ajax、axois
Fetch是什么
Fetch 是一个现代的概念, 等同于 XMLHttpRequest。它提供了许多与XMLHttpRequest相同的功能,但被设计成更具可扩展性和高效性。Fetch被很多浏览器所支持(兼容列表)。
Fetch 提供了对 Request 和 Response (以及其他与网络请求有关的)对象的通用定义。
Fetch 还利用到了请求的异步特性——它是基于 Promise 的。
用法
fetch方法接受一个表示url的字符串或者一个Request对象作为参数,第二个参数可选,包含配置信息。
返回值为Promise对象。
请求成功后将结果封装为Response对象,Response对象上具有json, text等方法。
//基本用法示例
fetch(url).then(function(response) {
return response.json();
}).then(function(data) {
console.log(data);
}).catch(function(e){
console.log('error');
});
Request配置项包括
method(请求方法):如GET、POST
headers(请求头信息)application/x-www-form-urlencodeed, multipart/form-data, application/json, text/xml
body(需要发送的信息):注意GET或HEAD方法的请求不能包含body信息
mode(请求的模式):如cors、no-cors或same-origin
credentials(自动发送当前域内cookie):如 omit、same-origin 或者 include。为了在当前域名内自动发送 cookie , 必须提供这个选项
cache(请求的catch模式):如default 、 no-store 、 reload 、 no-cache 、 force-cache 或者 only-if-cached
redirect(重定向模式):可自动(follow)或手动(manual)重定向
var myHeaders = new Headers();
myHeaders.append('Content-Type', 'application/x-www-form-urlencoded'); var myInit = {
method: 'POST',
credentials : 'include',//携带cookie请求
//headers: {"Content-Type": "application/x-www-form-urlencoded"},
headers : myHeaders,
body:'para1=0¶2=2',
mode: 'cors',
cache: 'default'
};
var myRequest = new Request(url,myInit); fetch(myRequest)
.then(res => {
return res.json()
})
.then(data => {
console.log(data)
})
与ajax、axios区别
1、JQuery.ajax()
$.ajax({
type: 'POST',
url: url,
data: data,
dataType: dataType,
success: function () {},
error: function () {}
});
传统 Ajax 指的是 XMLHttpRequest(XHR), 最早出现的发送后端请求技术,隶属于原始js中,核心使用XMLHttpRequest对象,多个请求之间如果有先后关系的话,就会出现回调地狱。
JQuery ajax 是对原生XHR的封装,除此以外还增添了对JSONP的支持。优点无需多言,这里指出几个缺点:
1.JQuery项目很大,若是单纯使用ajax却要引入整个项目。定制化(链接)方案不支持CDN服务。
2.基于异步模型不友好,造成回调地狱。
2、axios
axios({
method: 'post',
url: '/user/12345',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范。
在网上未找到缺点,大致优点如下
1.从 node.js 创建 http 请求。
2.支持 Promise API。
3.客户端支持防止CSRF(就是让你的每个请求都带一个从cookie中拿到的key, 根据浏览器同源策略,假冒的网站是拿不到你cookie中得key的,这样,后台就可以轻松辨别出这个请求是否是用户在假冒网站上的误导输入,从而采取正确的策略。)。
4.提供了一些并发请求的接口(重要,方便了很多的操作)。
3、fetch
try {
let response = await fetch(url);
let data = response.json();
console.log(data);
} catch(e) {
console.log("Oops, error", e);
}
fetch号称ajax替代品,使用了ES6中的Promise对象。
优点如下:
1.语法简洁
2.基于标准 Promise 实现,支持 async/await
缺点如下:
1.fetch只对网络请求报错,对400,500都当做成功的请求,需要封装去处理。
2.fetch默认不会带cookie,需要添加配置项。
3.fetch不支持abort(正在支持中),不支持超时控制,使用setTimeout及Promise.reject的实现的超时控制并不能阻止请求过程继续在后台运行,造成了流量的浪费。
4.fetch没有办法原生监测请求的进度,而XHR可以。
Fetch API 了解 及对比ajax、axois的更多相关文章
- Fetch API 接口参考
前言 Fetch API是新的ajax解决方案,用于解决古老的XHR对象不能实现的问题,Fetch API 提供了一个获取资源的接口(包括跨域请求),任何使用过 XMLHttpRequest 的人都能 ...
- Fetch API与POST请求那些事
简述 相信不少前端开发童鞋与后端联调接口时,都会碰到前端明明已经传了参数,后端童鞋却说没有收到,尤其是post请求,遇到的非常多.本文以node.js作为服务端语言,借用express框架,简要分析客 ...
- Ajax新玩法fetch API
目前 Web 异步应用都是基于 XMLHttpRequest/ActiveXObject (IE)实现的, 这些对象不是专门为资源获取而设计的,因而它们的 API 非常复杂,同时还需要开发者处理兼容性 ...
- Cross-origin resource sharing JSON with Padding 同源策略 JSONP 为什么form表单提交没有跨域问题,但ajax提交有跨域问题? XMLHttpRequest and the Fetch API follow the same-origin policy 预检请求(preflight request)
https://zh.wikipedia.org/wiki/跨来源资源共享 跨来源资源共享(CORS)是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略[1 ...
- 基于Promise规范的fetch API的使用
基于Promise规范的fetch API的使用 fetch的使用 作用:fetch 这个API,是专门用来发起Ajax请求的: fetch 是由原生 JS 提供的 API ,专门用来取代 XHR 这 ...
- Axios & fetch api & Promise & POST
Axios & fetch api & Promise & POST https://github.com/axios/axios https://appdividend.co ...
- fetch API 简单解读
http://f2e.souche.com/blog/fetch-api-jie-du/?utm_source=tuicool&utm_medium=referral 在我们日常的前端开发中, ...
- ES6 Fetch API HTTP请求实用指南
本次将介绍如何使用Fetch API(ES6 +)对REST API的 HTTP请求,还有一些示例提供给大家便于大家理解. 注意:所有示例均在带有箭头功能的 ES6中给出. 当前的Web /移动应用程 ...
- 了解 Fetch API与Fetch+Async/await
背景 提及前端与服务器端的异步通信,离不开 Ajax (Asynchronous JavaScript and XML).实际上我们常说的 Ajax 并非指某一项具体的技术,它主要是基于用脚本操作 H ...
随机推荐
- PHP开发网站,你是如何提高其网站的安全性的?
一.网站程序问题 很多网站的安全问题大多是由于网站程序存在漏洞,所以想要提高网站安全性,必须要选择安全的后台cms系统,若有能力可以自己去开发网站后台,这样安全性能得到极大的提高,若是从网上选择一些免 ...
- 错误“AxImp.exe”已退出,代码为 -1163019603【转载及个人看法】
http://blog.csdn.net/duguduchong/article/details/17166123 最近使用vs2010 在重新生成解决方案的时候出现 “AxImp.exe”已退出, ...
- mysql实现消息队列
mysql之消息队列 消息队列:在消息的传输过程中保存消息的容器. 消息队列管理器在将消息从它的源中继到它的目标时充当中间人.队列的主要目的是提供路由并保证消息的传递:如果发送消息时接收者不可用, ...
- 记录下log4j的两种配置方式
XML文件配置 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configura ...
- ROC曲线和PR曲线绘制【转】
TPR=TP/P :真正率:判断对的正样本占所有正样本的比例. Precision=TP/(TP+FP) :判断对的正样本占判断出来的所有正样本的比例 FPR=FP/N :负正率:判断错的负样本占所 ...
- 每日一问(常用的集合接口和类有哪些【二】)—ArrayList类和数组之间的转换
ArrayList的实质是数组,但是在类的实例中所存储的数组是无法访问的,因此实际上是无法直接作为数组使用,那么如何将这两者进行转化呢? Collection接口定义了toArray的方法,可将实现该 ...
- AtCoder Grand Contest 029 翻车记
A:对于每个B,会和其右边的每个W交换一次. #include<iostream> #include<cstdio> #include<cmath> #includ ...
- python selenium2 窗口切换实例
遍历hao123中某一区域的所有链接,点击每个链接时,会打开新的窗口,获取新窗口的title后关闭窗口,切换到初始窗口继续打开下一个链接 代码如下: #coding=utf-8 from seleni ...
- MVC如何设置启动页
1.解决方案下的项目,右键,属性,Web,特定页,切换下其他选项以保存
- Java应用中使用ShutdownHook友好地清理现场
在线上Java程序中经常遇到进程程挂掉,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.Java中得ShutdownHook提供了比较好的方案. JDK在1.3之后提 ...