扣丁学堂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方法解读相关推荐

  1. html数字显示百分比,扣丁学堂html5 教程之Canvas实现圆形进度条并显示数字百分比效果...

    今天扣丁学堂html5培训小编和大家分享一下Canvas实现圆形进度条并显示数字百分比效果示例,对html5感兴趣的小伙伴或者是参加学习的小伙伴可以了解一下. Canvas实现圆形进度条并显示数字百分 ...

  2. python程序调用写好的代码_扣丁学堂浅谈Python编程中NotImplementedError的使用方法...

    扣丁学堂浅谈Python编程中NotImplementedError的使用方法 2018-07-04 14:08:02 2559浏览 本篇文章扣丁学堂 Python编程中raise可以实现报出错误的功 ...

  3. python装饰器特性iy雾_扣丁学堂简述Python 装饰器装饰类中的方法

    扣丁学堂简述 Python 装饰器装饰类中的方法 本篇文章小编主要和读者们分享一下 Python 装饰器装饰类中的方法, 文中会有详细的代码 列出供大家参考,下面随小编一起来了解一下吧. 有一个类 T ...

  4. java for 字母金字塔_扣丁学堂Java培训简述如何用C#随机数生成字母金字塔

    本篇文章扣丁学堂Java培训小编给读者们简单分享一下如何用C#随机数生成字母金字塔,具有一定的参考价值,感文中有详细的代码列出供感兴趣的小伙伴参考,想要了解的小伙伴就随小编来看一下具体内容吧. 1.代 ...

  5. python面试题网站有哪些_扣丁学堂解析Python爬虫工程师面试题汇总

    扣丁学堂解析Python爬虫工程师面试题汇总 2018-08-20 11:24:39 1664浏览 今天,扣丁学堂的小编来给大家总结一下Python爬虫的面试技巧,希望给参加Python培训的同学一点 ...

  6. python代码优化指南_扣丁学堂Python视频教程之Pandas初学者代码优化指南

    扣丁学堂Python视频教程之Pandas初学者代码优化指南 2018-02-05 10:44:24 1320浏览 今天扣丁学堂给大家介绍一下关于Python视频教程之Pandas详解,首先Panda ...

  7. python 技巧视频教程_扣丁学堂Python视频教程之Python开发技巧

    扣丁学堂Python视频教程之Python开发技巧 2018-07-25 14:09:44 808浏览 关于Python开发的技巧小编在上篇文章已经给大家分享过一些,本篇文章扣丁学堂 神秘eval: ...

  8. python 匿名函数示例_扣丁学堂Python3开发之匿名函数用法示例详解

    扣丁学堂Python3开发之匿名函数用法示例详解 2018-07-26 14:01:11 1324浏览 今天扣丁学堂Python培训给大家分享关于Python3匿名函数用法,结合实例形式分析了Pyth ...

  9. python如何离线安装第三方模块_扣丁学堂python开发之第三方模块pip离线安装

    扣丁学堂python开发之第三方模块pip离线安装 2018-08-14 14:02:22 747浏览 最近很多参加Python培训的同学说在学习过程中需要安装一些第三方的模块,今天小编就来给大家讲一 ...

最新文章

  1. spring boot 文件上传工具类(bug 已修改)
  2. Redis (error) NOAUTH Authentication required.解决方法
  3. 2021.12.20用ULN2003驱动四线步进电机
  4. 函数式编程让你忘记设计模式
  5. Java多个注解合并_Java注解合并,注解继承
  6. android与ndk交互,NDK-JNI与Java的交互 hello-world
  7. NWT杂事:来公司只喝酒不谈工作
  8. mysql 慢日志 逻辑读_学会读懂 MySql 的慢查询日志
  9. 怎样在计算机上安装计算器,如何在win10系统电脑上重新安装计算器
  10. 许奔创新社-第38问:如何练就跨界打劫的本领?
  11. 记一次产品需求:图片等比缩放和CSS自适应布局16:9
  12. hdu 6592 Beauty Of Unimodal Sequence
  13. 5.stm32L476在freeRTOS下使用低功耗
  14. 初创企业购买企业邮箱_什么是技术债务? 为什么几乎每个初创企业都拥有它?...
  15. 图片放大模糊怎么办,Python无损清晰放大,360P变4K
  16. fatal: You have not concluded your merge (MERGE_HEAD exists). Please, commit your changes before you
  17. E575: viminfo: Illegal starting char in line:(z)
  18. java——显示当前月的日历
  19. 信息学奥赛一本通在线提交地址
  20. golang实现断点续传

热门文章

  1. linux原生系统_Linux的概述
  2. CentOS忘记root密码,重置
  3. 大学四年,强烈推荐第一个画图工具
  4. Group Delay and Phase Delay
  5. getaddrinfo的用法详解 .
  6. 华为设备硬件SACG认证
  7. ④ESP8266 开发学习笔记_By_GYC 【Ubuntu系统下ESP8266 开发环境搭建】
  8. 【实战】(香港城市大学,微软亚洲研究院)让老照片重现光彩(一):Bringing Old Photos Back to Life
  9. 基于java会议管理系统设计(含源文件)
  10. 考研英语一与英语二的区别