🟡JavaScript网络与资源请求
本文最后更新于:2024年4月25日 上午
XHR对象
🌽创建XHR对象
使用构造函数创建新XHR
对象
1 |
|
🌽open方法
XHR
对象使用open(method, url, Boolean)
方法定义请求
参数 | 说明 |
---|---|
method |
请求方式 |
url |
相对路径或绝对路径 |
Boolean |
是否异步执行 |
1 |
|
🌽send方法
XHR
对象使用send(data)
方法发送请求
当无数据发送时应传入null
以兼容
1 |
|
🌽XHR请求属性
使用send
方法后XHR
对象以下属性会接收响应数据
属性 | 说明 |
---|---|
status |
状态码 |
statusText |
状态文字描述 |
responseText |
响应文本 |
responseXML |
XML文档 |
🌽XHR阶段状态
readyState
属性可表示当前XHR
状态信息
属性值 | 状态 |
---|---|
0 |
未初始化(未使用open ) |
1 |
已初始化(已使用open ) |
2 |
已发送(已使用send ) |
3 |
正在接收响应数据 |
4 |
已完成数据接收 |
当状态改变时发生readystatechange
事件,可以此添加监听器,该事件不传递event
1 |
|
使用abort()
方法可将XHR
对象状态直接变为4
停止通信
🌽HTTP请求头
在使用open
方法后send
方法前使用setRequestHeader(key, value)
方法为请求头添加数据
🌽HTTP响应头
getResponseHeader(key)
获取对应响应头getAllResponseHeaders()
获取所有信息
XHR 2.0
🥕FormData类型
该类型可对表单数据进行序列化,并自动配置请求头
append(key, value)
可向表单添加数据
1 |
|
🥕timeout
XHR
对象的timeout
属性设置请求判断超时时间(ms),超时后触发timeout
事件,对象状态变为4
1 |
|
🥕overrideMimeType方法
在使用send
方法前调用overrideMimeType
方法可强制改变响应头对响应的处理方式(MIME)
1 |
|
进度事件
事件 | 说明 |
---|---|
loadstart |
接收到第一个响应字符 |
progress |
接收响应时反复触发 |
error |
请求出错 |
abort |
调用abort 方法 |
load |
响应接收完 |
loadend |
通信完成 |
🍉load
load
事件可传递event
参数,target
属性指向XHR
实例
无论请求是否成功均会触发
🍉progress
在接收响应期间会反复触发progress
事件,并可传递event
参数
event
参数有以下额外属性
属性 | 说明 |
---|---|
lengthComputable |
进度信息是否可用 |
posision |
已接收字节数 |
totalsize |
总字节数 |
跨源资源共享(CORS)
Fetch API
🍍Fetch参数
fetch(url, [init])
返回Promise
对象解决为Response
对象
url
为请求的绝对/相对路径
init
为以下的键值对
📌body
🍍Header对象
Response
或Request
的header
属性为一个Header
实例
可使用构造函数创建实例,可传入可迭代对象或键值对初始化
1 |
|
方法 | 说明 |
---|---|
get(key) ,set(key, value) ,has(key) ,delete(key) |
同Map 🔗前往查看 |
keys() ,values() ,entries() |
同Map 🔗前往查看 |
append(key, value) |
添加数据 |
📌头部护卫
🍍Request对象
可使用bodyUsed
属性为false
的Request
实例传递给fetch
1 |
|
使用new Requset(request)
可复制request
,但request
的bodyUsed
属性值会变为true
1 |
|
使用clone()
方法可复制一模一样的Request
实例
1 |
|
🍍Response对象
📌创建实例
使用构造函数创建Response
实例
可选参数有body
(同fetch
)和init
1 |
|
init 选项 |
说明 |
---|---|
headers |
键值对对象实例或Header 实例 |
status |
状态码 |
statusText |
状态文本 |
📌实例方法
方法 | 描述 |
---|---|
redirect('url', status) |
接收重定向地址与重定向状态码返回重定向后的Response 实例 |
error() |
产生表示网络错误的Response 对象 |
1 |
|
📌实例属性
属性 | 说明 |
---|---|
headers |
Header 对象 |
ok |
2xx 为true |
redirected |
是否重定向 |
status |
状态码 |
statusText |
状态文本 |
type |
basic ---------------------------------------------同源响应cors -----------------------------------------------跨源响应error ------------------------------实例由error方法生成opaque ---------------使用no-cors 的跨源fetch 响应opaqueredirect -对redirect 设置为manual 的响应 |
url |
最终请求地址 |
📌实例拷贝
1 |
|
🍍body
Request
与Response
实例均有只读的body
和bodyUsed
(ReadableStream
是否摄受)属性以及五种转换方法
body 混入方法 |
说明 |
---|---|
text() |
将缓冲区转换为UTF-8 字符串 |
json() |
将缓冲区转换为JSON |
formData |
将缓冲区转换为FromData 实例 |
arrayBuffer() |
将缓冲区转换为ArrayBuffer 实例 |
blob() |
将缓冲区转换为Blob 实例 |
body
混入方法只对bodyUsed
属性为false
的实例有效,且使用后bodyUsed
变为true
所以同一实例只可使用一次