Js中fetch方法
Js中fetch方法
fetch()
方法定义在Window
对象以及WorkerGlobalScope
对象上,用于发起获取资源的请求,其返回一个Promise
对象,这个Promise
对象会在请求响应后被resolve
,并传回Response
对象。
描述
Promise<Response> fetch(input[, init])
input
: 定义要获取的资源,其值可以是:
- 一个字符串,包含要获取资源的
URL
,一些浏览器会接受blob
和data
作为schemes
。 - 一个
Request
对象。
init
: 一个配置项对象,包括所有对请求的设置。可选的参数有:
method
: 请求使用的方法,如GET
、POST
。headers
: 请求的头信息,形式为Headers
的对象或包含ByteString
值的对象字面量。body
: 请求的body
信息:可能是一个Blob
、BufferSource
、FormData
、URLSearchParams
或者USVString
对象,注意GET
或HEAD
方法的请求不能包含body
信息。mode
: 请求的模式,如cors
、no-cors
或者same-origin
。credentials
: 请求的credentials
,如omit
、same-origin
或者include
,为了在当前域名内自动发送cookie
,必须提供这个选项。cache
: 请求的cache
模式:default
、no-store
、reload
、no-cache
、force-cache
或者only-if-cached
。redirect
: 可用的redirect
模式:follow
自动重定向,error
如果产生重定向将自动终止并且抛出一个错误,或者manual
手动处理重定向。referrer
: 一个USVString
可以是no-referrer
、client
或一个URL
,默认是client
。referrerPolicy
: 指定了HTTP
头部referer
字段的值,可能为以下值之一:no-referrer
、no-referrer-when-downgrade
、origin
、origin-when-cross-origin
、unsafe-url
。integrity
: 包括请求的subresource integrity
值,例如:sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=
。
返回一个Promise
,resolve
时回传Response
对象。
fetch与jQuery.ajax区别
- 当接收到一个代表错误的
HTTP
状态码时,从fetch()
返回的Promise
不会被标记为reject
, 即使响应的HTTP
状态码是404
或500
,其会将Promise
状态标记为resolve
,但是返回的Promise
会将resolve
的返回值的ok
属性设置为false
,仅当网络故障时或请求被阻止时,才会标记为reject
。 fetch()
不会接受跨域cookies
,你也不能使用fetch()
建立起跨域会话,其他域的Set-Cookie
头部字段将会被无视。fetch()
不会发送cookies
,除非使用了credentials
的初始化选项。
实例
发起请求
发起一个简单的资源请求,对于fetch
请求返回一个Promise
对象,这个Promise
对象会在请求响应后被resolve
,并传回Response
对象。
window.fetch("https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js")
.then(res => console.log(res))
设置参数
通过init
配置对象设置参数,可以设置method
、headers
、body
、mode
、credentials
、cache
、redirect
、referrer
、referrerPolicy
、integrity
。
var headers = new Headers({
"accept": "application/javascript"
});
headers.append("accept", "application/xml");
headers.set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36");
window.fetch("https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js", {
method: "GET",
headers: headers,
cache: 'no-cache',
})
.then(res => console.log(res))
Headers对象
Headers.append()
: 给现有的header
添加一个值, 或者添加一个未存在的header
并赋值。Headers.delete()
: 从Headers
对象中删除指定header
。Headers.entries()
: 以迭代器的形式返回Headers
对象中所有的键值对。Headers.get()
: 以ByteString
的形式从Headers
对象中返回指定header的全部值。Headers.has()
: 以布尔值的形式从Headers
对象中返回是否存在指定的header
。Headers.keys()
: 以迭代器的形式返回Headers
对象中所有存在的header
名。Headers.set()
: 替换现有的header
的值, 或者添加一个未存在的header
并赋值。Headers.values()
: 以迭代器的形式返回Headers
对象中所有存在的header
的值。
响应处理
通过Response
对象对响应的数据作处理,包括获取响应状态以及响应体的处理等操作。
window.fetch("https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js")
.then(res => res.text())
.then(data => console.log(data))
Response对象
Response
对象的相关属性与方法:
Response.headers
: 只读,包含此Response
所关联的Headers
对象。Response.ok
: 只读,包含了一个布尔值,标示该Response
成功,HTTP
状态码的范围在200-299
。Response.redirected
: 只读,表示该Response
是否来自一个重定向,如果是的话,它的URL
列表将会有多个条目。Response.status
: 只读,包含Response
的状态码。Response.statusText
: 只读,包含了与该Response
状态码一致的状态信息。Response.type
: 只读,包含Response
的类型,例如basic
、cors
。Response.url
: 只读,包含Response
的URL
。Response.useFinalURL
: 包含了一个布尔值,来标示这是否是该Response
的最终URL
。Response.clone()
: 创建一个Response
对象的克隆。Response.error()
: 返回一个绑定了网络错误的新的Response
对象。Response.redirect()
: 用另一个URL
创建一个新的Response
。
Response
实现了Body
接口,相关属性与方法可以直接使用:
Body.body
: 只读,一个简单的getter
,用于暴露一个ReadableStream
类型的body
内容。Body.bodyUsed
: 只读,包含了一个布尔值来标示该Response
是否读取过Body
。Body.arrayBuffer()
: 读取Response
对象并且将它设置为已读,并返回一个被解析为ArrayBuffer
格式的Promise
对象,Responses
对象被设置为了stream
的方式,所以它们只能被读取一次。Body.blob()
:
读取Response
对象并且将它设置为已读,并返回一个被解析为Blob
格式的Promise
对象。Body.formData()
:
读取Response
对象并且将它设置为已读,并返回一个被解析为FormData
格式的Promise
对象。Body.json()
:
读取Response
对象并且将它设置为已读,并返回一个被解析为JSON
格式的Promise
对象。Body.text()
:
读取Response
对象并且将它设置为已读,并返回一个被解析为USVString
格式的Promise
对象。
每日一题
https://github.com/WindrunnerMax/EveryDay
参考
https://segmentfault.com/a/1190000012740215
https://developer.mozilla.org/zh-CN/docs/Web/API/Headers
https://developer.mozilla.org/zh-CN/docs/Web/API/Response
https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API
https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API/Using_Fetch
https://developer.mozilla.org/zh-CN/docs/Web/API/WindowOrWorkerGlobalScope/fetch
Js中fetch方法的更多相关文章
- 【转载】JS中bind方法与函数柯里化
原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情 ...
- 原生JS中apply()方法的一个值得注意的用法
今天在学习vue.js的render时,遇到需要重复构造多个同类型对象的问题,在这里发现原生JS中apply()方法的一个特殊的用法: var ary = Array.apply(null, { &q ...
- js中apply方法的使用
js中apply方法的使用 1.对象的继承,一般的做法是复制:Object.extend prototype.js的实现方式是: Object.extend = function(destinat ...
- paip.编程语言方法重载实现的原理及python,php,js中实现方法重载
paip.编程语言方法重载实现的原理及python,php,js中实现方法重载 有些语言,在方法的重载上,形式上不支持函数重载,但可以通过模拟实现.. 主要原理:根据参数个数进行重载,或者使用默认值 ...
- js中settimeout方法加参数
js中settimeout方法加参数的使用. 简单使用看w3school 里面没有参数调用, 例子: <script type="text/javascript"> ...
- js中split()方法得到的数组长度
js 中split(",")方法通过 ”,“ 分割字符串, 如果字符串中没有 “,” , 返回的是字符串本身 var str = “abc”://分隔符个数为0 var newSt ...
- 关于JS中的方法是否加括号的问题
js中的方法什么时候加括号什么时候不加括号呢,我们有时候经常就搞不清楚,记住下面这几点就好理解了. 1.函数做参数时都不要加括号. function fun(a){ alert(a); } funct ...
- js中的方法如何传入多个参数
js中的方法如何传入多个参数 $(function () { let parameter1 = 1; let parameter2 = 'Hello World'; let parameter3 = ...
- js 中的方法注入(aop)
js 中的方法注入 java中很多框架支持 apo 的注入, js中也可以类似的进行实现 主要是通过扩展js中方法的老祖 Function 对象来进行实现. Function.prototype.af ...
- JS高级面试题思路(装箱和拆箱、栈和堆、js中sort()方法、.js中Date对象中的getMounth() 需要注意的、开发中编码和解码使用场景有哪些)
1.装箱和拆箱: 装箱:把基本数据类型转化为对应的引用数据类型的操作: var num = 123 // num var objNum = new Num(123) // object console ...
随机推荐
- SQLServer数据库优化学习-总结
SQLServer数据库优化学习-总结 背景 各种能力都需要提升. 最近总是遇到SQLServer的问题 趁着周末进行一下学习与提高. 安装与优化 1. 数据库必须安装 64位, 不要安装成32位的版 ...
- [转帖]Linux:crontab要点整理(表达式,转义,权限管理,日志)
https://www.jianshu.com/p/fd46652f247e 摘要:Linux,crontab整理crontab的使用,包括cron表达式,设置和删除任务,权限管理,查看日志 cron ...
- 【转帖】JVM 内存模型与垃圾回收
文章目录 1. JVM内存模型 1.1. 程序计数器 (线程私有) 1.2. Java 虚拟机栈 (线程私有) 1.3. 本地方法栈 (线程私有) 1.4. Java 堆 (线程共享) 1.5. 方法 ...
- [转帖]Web性能优化工具WebPageTest(三)——本地部署(Windows 7版本)
http://www.zlprogram.com/Show/30/30117.shtml 这次先能够使用PC端的浏览器测试,首先需要下载官方的发布版本"WebPageTest 3.0&quo ...
- [转帖]vs调试运行程序出现:“由于找不到MSVCP140D.dll,无法继续执行代码 ”的解决方法
碎碎念 最近在使用Visual studio调试程序的时候,突然冒出了"由于找不到MSVCP140D.dll,无法继续执行代码.重新安装程序可能会解决次问题."的错误.如下图所示. ...
- [转帖]setsockopt(setsockopt的使用方法及注意事项)
http://xingzuo.aitcweb.com/9156453.html 1. setsockopt简介 setsockopt是一个系统调用函数,用于设置套接字选项.套接字是指通信的两个端点之间 ...
- 信创CPU与牙膏厂和按摩店CPU的简单对比
信创CPU与牙膏厂和按摩店CPU的简单对比 摘要 周天时学习验证了SPEC2006的工具. 晚上时写完了第一稿简单的使用 因为 SPEC 完整跑完非常漫长. 我想了一下短平快还是通过使用一个简单的 r ...
- nginx 进行目录浏览的简单配置
1. 公司网络安全不让用vsftpd的匿名网络访问了, 没办法 只能够使用 nginx 通过http协议来处理. 2. 最简单的办法就是另外开一个nginx进程简单设置一下nginx的配置文件 wor ...
- 使用influxdb以及Grafana监控vCenter的操作步骤
1. 下载安装介质 计划telegraf和influxdb 使用rpm包进行安装.Grafana使用docker容器方式安装 下载路径为: https://repos.influxdata.com/r ...
- vue3封装搜索表单组件
seacrch 表单完成的功能 1.根据配置json配置项自动生成表单 ok 2.是响应式的排版 ok 3.点击搜索按钮会向上抛出值 ok 4.点击重置按钮会自动清空数据,不需要父组件额外的处理 ok ...