fetch 不是xhr_fetch与XHR的区别与优势
Fetch API更加现代
XHR 和 Fetch API 最显著的区别就是调用方式不同。这一点大家应该都知道吧。
举个例子,下面两端代码完成的是同一功能:
// 用 XHR 发起一个GET请求
var xhr = new XHMHttpRequest();
xhr.open('GET', url);
xhr.responseType = 'json';
xhr.onload = function(){
console.log(xhr.response);
};
xhr.onerror = function(){
console.log('something wrong~ ╮( ̄▽ ̄)╭');
};
xhr.send();
// 用 Fetch 完成同样的请求
fetch(url).then(function(response){
return response.json();
}).then(function(jsonData){
console.log(jsonData);
}).catch(function(){
console.log('something wrong~ ╮( ̄▽ ̄)╭');
});
相比 XHR ,Fetch 结合了现代的编码模式,使用起来更简洁 ,完成工作所需的实际代码量也更少。
Fetch API更底层
其实,刚才说到的 Fetch API 并不是指仅仅一个 fetch 方法,还包括 Request、 Response、Headers、Body都一系列原生对象。对于传统的XHR而言,你必须使用它的一个实例来发出请求和处理响应。 但是通过Fetch API,我们还能够通过刚才提到的原生对象,明确的配置请求和响应。这些底层的抽象让 Fetch API 比 XHR 更灵活。
举个例子,现在要下载一个很大的 utf-8 格式的 txt 文件,我们通过流式的响应体而不是文本的形式读取,最后显示在一个div中。(为什么使用流、使用流有什么好处我就不做过多解释了……)
document.addEventListener('DOMContentLoaded', function(e){
var url = 'Test.txt';
var div = document.getElementById('content');
var progress = 0;
var contentLength = 0;
fetch(url).then(function(response){
// 通过响应头获取文件大小
contentLength = response.headers.get('Content-Length');
var pump = function(reader){
return reader.read().then(function(result){
// 如果流中的内容读取完毕,result.done的值会变为true
if (!result.done) {
// 获取流中的数据
var chunk = result.value;
var text = '';
// 流中的数据是一串字节码,需要做转码
for (var i = 3; i < chunk.byteLength; i++) {
text += String.fromCharCode(chunk[i]);
}
// 添加到页面的div中
div.innerHTML += text;
// 还可以用流的长度显示当前进度
progress += chunk.byteLength;
console.log(((progress / contentLength) * 100) + '%');
// 开始读取下一个流
return pump(reader);
}
});
}
// 开始读取流中的信息
return pump(response.body.getReader());
})
.catch(function(error){
console.log(error);
});
});
在上面的例子中,我们不止使用了流来下载文件,还通过响应头获取了响应的具体信息,显示了下载的进度。虽然使用XHR也能做到使用流来读取文件,不过现在应该只有IE浏览器支持。但是 Fetch API 提供了访问数据的实际字节的方法,而 XHR 的 responseText 只有文本形式,这意味着在某些场景下它的作用可能非常有限。
Fetch API更接近未来
当我们在谈论 Fetch API 时,我们在谈论的不止是这些已经胜过 XHR 的地方,更是在谈论 Fetch API未来的可能性。比如未来基于 Fetch 和 Service Worker 的缓存和请求拦截技术。
GIT(6)----fork和clone的区别,fetch与pull的区别
参考资料: [1].Git学习笔记:fork和clone的区别,fetch与pull的区别 [2].在Github和Git上fork之简单指南
ajax、axios、fetch之间的详细区别以及优缺点
1.jQuery ajax $.ajax({ type: 'POST', url: url, data: data, dataType: dataType, success: function () ...
git clone、git pull和git fetch的用法及区别
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流.Git 常用命令速查表 最近在一个学习小组里学习AI的课程,我们所有的学习资料和homework都放在gitlab上.今天一个小队友从gitlab ...
[异步请求]ajax、axios、fetch之间的详细区别以及优缺点
1.jQuery ajax $.ajax({ type: 'POST', url: url, data: data, dataType: dataType, success: function () ...
SpringMVC和Struts2的区别及优势
1.SpringMVC和Struts2的区别比较 1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方 ...
【git之】fetch和 pull的区别
Git中从远程的分支获取最新的版本到本地有这样2个命令:1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge Git fetch origin master git log ...
git fetch和push的区别
获取fetch的用法 git-fetch用于从另一个reposoitory下载objects和refs. 命令格式为:git fetch … 其中表示远端的仓库路径.git remote add or ...
Vue与REACT两个框架的区别和优势对比
VUE和REACT两个JavaScript框架都是当下比较受欢迎的,他们两者之间的区别有那些,各自的优缺点是什么,本文将为你呈现. 简单介绍 除非你最近一直不关注前端的发展,不然你肯定听说过由Face ...
git fetch和pull的区别
Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge 1 2 3 Git fetch origin master ...
随机推荐
svn cleanup failed问题解决
1.SVN出错 今早过来Update,报如下错误: 再次更新,svn会要求你执行clean up,但执行clean up仍会报错,说有未完的work item,还要求你执行clean up.汗,陷入死 ...
修改tabbar 字体颜色
NSDictionary *seletedTextAttrs = @{NSForegroundColorAttributeName:[UIColor orangeColor]}; 修改tabbar 字 ...
HDU 4825 Xor sum
trie树的异或和问题 本题是一道经典题,使用trie树维护所给出的集合,我们知道等比数列前n项的和比第n+1项小,所以本题可以使用贪心策略,对于每一个询问,我们从高位向低位匹配,寻找最大异或值,向下 ...
python基础知识10---算法
一.递归 程序本身自己调用自己称之为递归,类似于俄罗斯套娃,体现在代码中:用户执行最外(N)层函数,最外侧调用N-1层函数,N-1层函数调用N-2层函数... 利用函数编写如下数列: 斐波那契数列指的 ...
HTML学习笔记08-表格
HTML表格 表格由
标签来定义
Bootstrap(6)图标菜单按钮组件 一.小图标组件 Bootstrap 提供了免费的 263 个小图标(数了两次),具体可以参考中文官网的组件链接:http://v3.bootcss.com/components/#glyphicons ... Django之ORM其他骚操作 执行原生SQl Django ORM执行原生SQL # extra # 在QuerySet的基础上继续执行子语句 # extra(self, select=None, where=None, params=Non ... selenium遇到不可编辑input和隐藏input如何赋值 js = 'document.getElementsByName("m:csr_mt_gnccspjclfbxd:bmshldID")[0].type="text&quo ... |
fetch 不是xhr_fetch与XHR的区别与优势相关推荐
- fetch与XHR的区别与优势
Fetch API更加现代 XHR 和 Fetch API 最显著的区别就是调用方式不同.这一点大家应该都知道吧. 举个例子,下面两端代码完成的是同一功能: // 用 XHR 发起一个GET请求 va ...
- fetch和XHR的区别
fetch和XHR(XMLHttpRequest)分别是什么? fetch和XHR都是是获取远端数据的方式. fetch是原生js方法,没有使用XMLHttpRequest对象,使用fetch可以不用 ...
- [vue] ajax、fetch、axios这三都有什么区别?
[vue] ajax.fetch.axios这三都有什么区别? ajax, 实际上就是xmlHttpRequest, 旧瓶装新酒的一种新应用的称呼 fetch是新出的规范, 具体实现原理不太清楚, 但 ...
- 黑苹果适合什么用途?_黑苹果系统,Ozmosis和四叶草、变色龙相比有什么区别和优势?...
黑苹果单系统,Ozmosis和四叶草.变色龙相比有什么区别和优势? 黑苹果系统用于影视后期处理 ozmosis由于调试灵活性差,每次调试都要刷bios,主板厂商提供的bios也就8mb,要把,ozmo ...
- 功率半导体芯片是什么_LED日光灯与传统日光灯之间有什么区别和优势呢?
光影 光影空间 光影空间--全球领先的LED行业知识共享平台 365天,坚持不懈!只为带给你最新最实用的LED信息 投稿邮箱:3269384076@qq.com 在现代的生活中,灯具的发展越来越好了, ...
- gophp解释器_[2020年面试题-PHP 与 golang] .Go 和 PHP 在运行的时候有什么区别和优势...
原文链接 面试题解析 看你简历里也有用过 Go,Go 和 PHP 在运行的时候有什么区别和优势? 题主原回答: PHP 每个请求进来时都会创建 fpm-worker 进程,从而导致系统并发高时 CPU ...
- matlab仿真的优势,新手必看 saber和simulink的区别与优势
新手必看 saber和simulink的区别与优势 来源:华强电子网 作者:华仔 浏览:569 时间:2016-11-04 16:09 标签: 摘要: 说到电路中的仿真模拟软件,是使用面最广也是最为专 ...
- Vue与React两个框架的区别和优势对比
Vue与React两个框架的区别和优势对比 Vue和React两个JavaScript框架都是当下比较受欢迎的,他们两者之间的区别有哪些,各自的优缺点是什么,本文将为你呈现. 我已经写出了两个几乎一样 ...
- git fetch实战以及与git pull 的区别
共有四种方式 1.git fetch 这一步执行两个操作 创建并更新所有远程分支的本地分支并设定当前当前分支 的fetch_head为远程的master 2.git fetch origin 同上只不 ...
最新文章
- (chap6 Http首部) 请求首部字段 If-Modified-SinceIf-None-Match If-RangeIf-Unmidified-Since
- C#.NET 可以为不同的客户定制不同的登录窗体的设计思路参考【功能代码组件化,可以灵活选配】...
- Java-String类型的参数传递问题
- as3:sprite作为容器使用时,最好不要指定width,height
- #ifndef、#def、#endif等宏是什么意思
- U盘数据泄露,用不到30行的Python代码就能盗走
- Android获取MAC地址
- 面试官:说说Java对象的四种引用方式
- 项目部署:服务器IIS发布后本地浏览没有问题,外网访问显示无法访问
- 丰收互联蓝牙key怎么开机_蓝牙UKEY使用说明
- 美国大学计算机信息技术专业排名,新鲜出炉 2019年USNews美国大学信息技术管理专业排名榜单!...
- 天龙八部荣耀版体验服服务器未响应,天龙八部荣耀版体验服
- access里面的表达式运用_Access 如何使用表达式生成器
- Vivado安装—Xilinx design tool already exists for 2019.1,specify a different program program group entr
- html轮播图jquery,原生js和jquery实现图片轮播特效
- 【沐风老师】3dMax Gyroid Minimal Surface 极小曲面建模详细教程
- sequelize 设置mysql字段类型,text字符长度太小可采用longText
- Word长篇文档排版技巧
- 地下迷宫探索 java_Java 8:探索可能性
- 【创新²】SERO超零协议项目进展双月报
热门文章
- AESRijndael加密
- JAVA编码 —— 字符串关键字内容替换
- 数据的统计分析与描述
- Apache模块管理
- Devexpress - office - 效果
- 【Hadoop代码笔记】Hadoop作业提交之客户端作业提交
- Clay:易塑的c#动态对象——第一部分:为什么我们需要它
- 使用过的MySql查询语句[待续...]
- 从零开始学前端:CSS元素模式的转换和CSS三大特性 --- 今天你学习了吗?(CSS:Day12)
- netbeans基于mysql学生信息_学生信息管理系统的设计与实现(NetBeans IDE,MySQL)