h5的fetch方法_扣丁学堂HTML5分享h5中的fetch方法解读
扣丁学堂HTML5分享h5中的fetch方法解读
2018-07-06 14:43:10
725浏览
本篇文章扣丁学堂
Fetch概念:
fetch身为H5中的一个新对象,他的诞生,是为了取代ajax的存在而出现,主要目的仅仅只是为了结合ServiceWorkers,来达到以下优化:
优化离线体验
保持可扩展性
当然如果ServiceWorkers和浏览器端的数据库IndexedDB配合,那么恭喜你,每一个浏览器都可以成为一个代理服务器一样的存在。(然而我并不认为这样是好事,这样会使得前端越来越重,走以前c/s架构的老路)
1、前言
既然是h5的新方法,肯定就有一些比较older的浏览器不支持了,对于那些不支持此方法的
浏览器就需要额外的添加一个polyfill:
2、用法
ferch(抓取) :
HTML:
fetch('/users.html') //这里返回的是一个Promise对象,不支持的浏览器需要相应的ployfill或通过babel等转码器转码后在执行
.then(function(response) {
return response.text()})
.then(function(body) {
document.body.innerHTML = body
})
JSON :
fetch('/users.json')
.then(function(response) {
return response.json()})
.then(function(json) {
console.log('parsed json', json)})
.catch(function(ex) {
console.log('parsing failed', ex)
})
Response metadata :
fetch('/users.json').then(function(response) {
console.log(response.headers.get('Content-Type'))
console.log(response.headers.get('Date'))
console.log(response.status)
console.log(response.statusText)
})
Post form:
var form = document.querySelector('form')
fetch('/users', {
method: 'POST',
body: new FormData(form)
})
Post JSON:
fetch('/users', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({ //这里是post请求的请求体
name: 'Hubot',
login: 'hubot',
})
})
File upload:
var input = document.querySelector('input[type="file"]')
var data = new FormData()
data.append('file', input.files[0]) //这里获取选择的文件内容
data.append('user', 'hubot')
fetch('/avatars', {
method: 'POST',
body: data
})
3、注意事项
(1)和ajax的不同点:
1. fatch方法抓取数据时不会抛出错误即使是404或500错误,除非是网络错误或者请求过程中被打断.但当然有解决方法啦,下面是demonstration:
function checkStatus(response) {
if (response.status >= 200 && response.status < 300) { //判断响应的状态码是否正常
return response //正常返回原响应对象
} else {
var error = new Error(response.statusText) //不正常则抛出一个响应错误状态信息
error.response = response
throw error
}
}
function parseJSON(response) {
return response.json()
}
fetch('/users')
.then(checkStatus)
.then(parseJSON)
.then(function(data) {
console.log('request succeeded with JSON response', data)
}).catch(function(error) {
console.log('request failed', error)
})
2.一个很关键的问题,fetch方法不会发送cookie,这对于需要保持客户端和服务器端常连接就很致命了,因为服务器端需要通过cookie来识别某一个session来达到保持会话状态.要想发送cookie需要修改一下信息:
fetch('/users', {
credentials: 'same-origin' //同域下发送cookie
})
fetch('https://segmentfault.com', {
credentials: 'include' //跨域下发送cookie
})
以上就是扣丁学堂
【关注微信公众号获取更多学习资料】
标签:
扣丁学堂HTML5培训
h5中的fetch方法解读
HTML5培训
HTML5视频教程
HTML5在线课程
HTML5在线学习
HTML5在线视频
HTML5从入门到精通
html5基础教程
h5的fetch方法_扣丁学堂HTML5分享h5中的fetch方法解读相关推荐
- html数字显示百分比,扣丁学堂html5 教程之Canvas实现圆形进度条并显示数字百分比效果...
今天扣丁学堂html5培训小编和大家分享一下Canvas实现圆形进度条并显示数字百分比效果示例,对html5感兴趣的小伙伴或者是参加学习的小伙伴可以了解一下. Canvas实现圆形进度条并显示数字百分 ...
- python程序调用写好的代码_扣丁学堂浅谈Python编程中NotImplementedError的使用方法...
扣丁学堂浅谈Python编程中NotImplementedError的使用方法 2018-07-04 14:08:02 2559浏览 本篇文章扣丁学堂 Python编程中raise可以实现报出错误的功 ...
- python装饰器特性iy雾_扣丁学堂简述Python 装饰器装饰类中的方法
扣丁学堂简述 Python 装饰器装饰类中的方法 本篇文章小编主要和读者们分享一下 Python 装饰器装饰类中的方法, 文中会有详细的代码 列出供大家参考,下面随小编一起来了解一下吧. 有一个类 T ...
- java for 字母金字塔_扣丁学堂Java培训简述如何用C#随机数生成字母金字塔
本篇文章扣丁学堂Java培训小编给读者们简单分享一下如何用C#随机数生成字母金字塔,具有一定的参考价值,感文中有详细的代码列出供感兴趣的小伙伴参考,想要了解的小伙伴就随小编来看一下具体内容吧. 1.代 ...
- python面试题网站有哪些_扣丁学堂解析Python爬虫工程师面试题汇总
扣丁学堂解析Python爬虫工程师面试题汇总 2018-08-20 11:24:39 1664浏览 今天,扣丁学堂的小编来给大家总结一下Python爬虫的面试技巧,希望给参加Python培训的同学一点 ...
- python代码优化指南_扣丁学堂Python视频教程之Pandas初学者代码优化指南
扣丁学堂Python视频教程之Pandas初学者代码优化指南 2018-02-05 10:44:24 1320浏览 今天扣丁学堂给大家介绍一下关于Python视频教程之Pandas详解,首先Panda ...
- python 技巧视频教程_扣丁学堂Python视频教程之Python开发技巧
扣丁学堂Python视频教程之Python开发技巧 2018-07-25 14:09:44 808浏览 关于Python开发的技巧小编在上篇文章已经给大家分享过一些,本篇文章扣丁学堂 神秘eval: ...
- python 匿名函数示例_扣丁学堂Python3开发之匿名函数用法示例详解
扣丁学堂Python3开发之匿名函数用法示例详解 2018-07-26 14:01:11 1324浏览 今天扣丁学堂Python培训给大家分享关于Python3匿名函数用法,结合实例形式分析了Pyth ...
- python如何离线安装第三方模块_扣丁学堂python开发之第三方模块pip离线安装
扣丁学堂python开发之第三方模块pip离线安装 2018-08-14 14:02:22 747浏览 最近很多参加Python培训的同学说在学习过程中需要安装一些第三方的模块,今天小编就来给大家讲一 ...
最新文章
- spring boot 文件上传工具类(bug 已修改)
- Redis (error) NOAUTH Authentication required.解决方法
- 2021.12.20用ULN2003驱动四线步进电机
- 函数式编程让你忘记设计模式
- Java多个注解合并_Java注解合并,注解继承
- android与ndk交互,NDK-JNI与Java的交互 hello-world
- NWT杂事:来公司只喝酒不谈工作
- mysql 慢日志 逻辑读_学会读懂 MySql 的慢查询日志
- 怎样在计算机上安装计算器,如何在win10系统电脑上重新安装计算器
- 许奔创新社-第38问:如何练就跨界打劫的本领?
- 记一次产品需求:图片等比缩放和CSS自适应布局16:9
- hdu 6592 Beauty Of Unimodal Sequence
- 5.stm32L476在freeRTOS下使用低功耗
- 初创企业购买企业邮箱_什么是技术债务? 为什么几乎每个初创企业都拥有它?...
- 图片放大模糊怎么办,Python无损清晰放大,360P变4K
- fatal: You have not concluded your merge (MERGE_HEAD exists). Please, commit your changes before you
- E575: viminfo: Illegal starting char in line:(z)
- java——显示当前月的日历
- 信息学奥赛一本通在线提交地址
- golang实现断点续传