fetch技术
Snandy
If you cannot hear the sound of the genuine in you, you will all of your life spend your days on the ends of strings that somebody else pulls.
Fetch:下一代 Ajax 技术
Ajax,2005年诞生的技术,至今已持续了 10 年。它是一种在客户端创建一个异步请求的技术,本质上它不算创新,是一组技术的组合。它的核心对象是 XMLHttpRequest。
简单回顾下历史
- 1996年,IE 中首先添加了 iframe 用来实现异步请求获取服务器内容
- 1998年,微软 Outlook 在客户端 script 中实现了 XMLHttp 对象
- 1999年,微软在 IE5 中添加了 XMLHTTP ActiveX 对象用来异步获取服务器内容,该对象直到 Edge 浏览器才废弃。其它浏览器陆续实现了类似的对象称为 XMLHttpRequest
- 2004年,Google Gmail 中大量使用 XMLHttpRequest
- 2005年,Google Map 中大量使用 XMLHttpRequest
- 2005年,Jesse James Garrett 发表了文章 "Ajax: A New Approach to Web Applications",Ajax 诞生
- 2006年,XMLHttpRequest 被 W3C 采纳,最后更新时间是 2014年1月
使用步骤大概如下
|
1
2
3
4
5
6
7
8
9
10
11
12
|
var xhr = new XMLHttpRequest();xhr.open('GET', url);xhr.onload = function() { // To do with xhr.response};xhr.onerror = function() { // Handling errors};xhr.send(); |
以上可以看出,XHR 使用 onXXX 处理,典型的 "事件模式"。
Fetch 目前还不是 W3C 规范,由 whatag负责出品。与 Ajax不同的是,它的 API 不是事件机制,而采用了目前流行的 Promise 方式处理。我们知道 Promise是已经正式发布的 ES6 的内容之一。
|
1
2
3
4
5
6
7
8
9
|
fetch('doAct.action').then(function(res) { if (res.ok) { res.text().then(function(obj) { // Get the plain text }) }}, function(ex) { console.log(ex)}) |
以上 fetch 函数是全局的,目前最新的Firefox,Chrome,Opera 都已支持,详见


以上是一个最简单的请求,只要传一个参数 url 过去,默认为 get 请求,获取纯文本,fetch 第二个参数可以进行很多配置,比如 POST 请求
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
fetch("doAct.action", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: "keyword=荣耀7i&enc=utf-8&pvid=0v3w1kii.bf1ela"}).then(function(res) { if (res.ok) { // To do with res } else if (res.status == 401) { // To do with res }}, function(e) { // Handling errors}); |
如果返回的是 JSON, 如下
|
1
2
3
4
5
6
7
8
9
|
fetch('doAct.action').then(function(res) { if (res.ok) { res.json().then(function(obj) { // Get the JSON }) }}, function(ex) { console.log(ex)}) |
res 实际上该规范定义的 Response 对象,它有如下方法
- arrayBuffer()
- blob()
- json()
- text()
- formData()
此外,Fetch 跨域请求时默认不会带 cookie,需要时得手动指定 credentials: 'include'
|
1
2
3
|
fetch('doAct.action', {credentials: 'include'}).then(function(res) { // ...}) |
这和 XHR 的 withCredentials 一样,只是 withCredentials 只要设为 true。
fetch技术的更多相关文章
- web前端(实习生)之 “百度一面”
2016.3.18,星期五.我经历了我的第一次面试. 不得不说,百度是一个高效的公司,在短短一下午之间我就直接经历了一面二面,说没有压力是假的,还记得在中途等待二面的时候我至少有一小段的时间脑子是卡带 ...
- gogs 小团队使用
最近小团队开始使用 gogs 来保存手头的项目.具体的使用流程如下: 由 root 用户新建 organization, 比如说建立 hardware,然后把团队的 技术负责人拉到 owners 这个 ...
- Fetch:下一代 Ajax 技术
Ajax,2005年诞生的技术,至今已持续了 10 年.它是一种在客户端创建一个异步请求的技术,本质上它不算创新,是一组技术的组合.它的核心对象是 XMLHttpRequest. 简单回顾下历史 19 ...
- Elasticsearch由浅入深(十)搜索引擎:相关度评分 TF&IDF算法、doc value正排索引、解密query、fetch phrase原理、Bouncing Results问题、基于scoll技术滚动搜索大量数据
相关度评分 TF&IDF算法 Elasticsearch的相关度评分(relevance score)算法采用的是term frequency/inverse document frequen ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- KnockoutJS 3.X API 第七章 其他技术(1) 加载和保存JSON数据
Knockout允许您实现复杂的客户端交互性,但几乎所有Web应用程序还需要与服务器交换数据,或至少将本地存储的数据序列化. 最方便的交换或存储数据的方式是JSON格式 - 大多数Ajax应用程序今天 ...
- Kafka 技术文档
Kafka 技术文档 目录 1 Kafka创建背景 2 Kafka简介 3 Kafka好处 3.1 解耦 3.2 冗余 3.3 扩展性 3.4 灵活性 & 峰值处理能力 3.5 可恢复性 ...
- 《精通Hibernate:Java对象持久化技术详解》目录
图书信息:孙卫琴 电子工业出版社 第1章 Java应用分层架构及软件模型: 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1 ...
- 记一次数据库调优过程(IIS发过来SQLSERVER 的FETCH API_CURSOR语句是神马?)
记一次数据库调优过程(IIS发过来SQLSERVER 的FETCH API_CURSOR语句是神马?) 前几天帮客户优化一个数据库,那个数据库的大小是6G 这麽小的数据库按道理不会有太大的性能问题的, ...
随机推荐
- Kali Linux介绍篇
Kali Linux 官网:https://www.kali.org/ Kali Linux 前身是著名渗透测试系统BackTrack ,是一个基于 Debian 的 Linux 发行版,包含很多安全 ...
- AI-Info-Micron-Insight:工业 5.0,伟大的思想将殊途同归
ylbtech-AI-Info-Micron-Insight:工业 5.0,伟大的思想将殊途同归 1.返回顶部 1. 工业 5.0,伟大的思想将殊途同归 两个头脑比一个好吗?似乎如此,尤其是当其中一个 ...
- 安装eclipse(tomcat配置maven搭建){Java基础之开发工具}
安装eclipse 1.下载eclipse-jee-neon-3-win32-x86_64 zip 百度云盘 解压 2. 下载JDK 官网 JDK 8 JDK电脑上环境变量配置 Path路径 % ...
- 并查集【洛谷P1197】 [JSOI2008]星球大战
P1197 [JSOI2008]星球大战 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系 ...
- 前三次OO作业总结
一.作业总结 前三次的任务都是表达式求导.这是我在高中就思考过的问题,但是很久都没有付诸实践,直到学习了"类"这个强大的工具.还有正则表达式,如果能适当使用,则不失为一个字符串格式 ...
- Tensorflow实践
确定文件的编码格式 # -*- coding : utf-8 -*- 引入tensorflow库 import tensorflow as tf 定义常量 hw=tf.contant("he ...
- 2019-5-1 maven学习笔记
一.maven的好处 同样的项目使用maven工程来实现,由于不需要导入很多jar包,源码很小 原理:根据坐标到项目的仓库里查找需要的依赖 二.安装步骤 1.到http://maven.apache. ...
- php curl 请求api 接口
官方文档curl : http://www.runoob.com/php/php-ref-curl.html php开启curl : ① 打开 php.ini 文件 extension=php_c ...
- 华东交通大学2015年ACM“双基”程序设计竞赛1003
Problem C Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Sub ...
- spring @Transactional事务失效
不开事务几种情形 ① @Transactional写在了private方法上 org.springframework.transaction.interceptor.AbstractFallbackT ...