Fetch Response 接口
Fetch API 的 Response 接口呈现了对一次请求的响应数据,fetch() 请求成功以后,得到一个 Response 对象,它对应服务器的 HTTP 回应。
一、Response 的构造器
Response()
:创建一个新的 Response 对象。
二、Response 的属性
Response.headers
(只读):包含此 Response 所关联的 Headers 对象。Response.ok
(只读):返回一个布尔值,表示请求是否成功,true 对应 HTTP 请求的状态码 200 到 299,false 对应其他的状态码。Response.redirected
(只读):返回一个布尔值,表示请求是否发生过跳转。Response.status
(只读):返回一个数字,表示 HTTP 回应的状态码(例如 200 表示成功请求)Response.statusText
(只读):返回一个字符串,表示 HTTP 回应的状态信息(例如请求成功以后,服务器返回"OK")Response.type
(只读):包含 Response 的类型,返回请求的类型可能值如下:- basic:普通请求,即同源请求。
- cors:跨域请求。
- error:网络错误,主要用于 Service Worker。
- opaque:如果 fetch() 请求的 type 属性设为 no-cors,就会返回这个值。
- opaqueredirect:如果 fetch() 请求的 redirect 属性设为 manual,就会返回这个值。
Response.url
(只读):返回请求的 URL,如果 URL 存在跳转,该属性返回的是最终 URL。Response.useFinalURL
:包含了一个布尔值,来标示这是否是该 Response 的最终 URL。Body.body
(只读):一个简单的 getter,用于暴露一个 ReadableStream 类型的 body 内容。Body.bodyUsed
(只读):包含了一个布尔值来标示该 Response 是否读取过 Body。
三、Response 的方法
Response.clone()
:创建一个 Response 对象的克隆。Response.error()
:返回一个绑定了网络错误的新的 Response 对象。Response.redirect()
:用另一个 URL 创建一个新的 Response。
Response 对象根据服务器返回的不同类型的数据,提供了不同的读取方法:
response.text()
:得到文本字符串。response.json()
:得到 JSON 对象。response.blob()
:得到二进制 Blob 对象。response.formData()
:得到 FormData 表单对象。response.arrayBuffer()
:得到二进制 ArrayBuffer 对象。
上面 5 个读取方法都是异步的,返回的都是 Promise 对象。必须等到异步操作结束,才能得到服务器返回的完整数据。
四、Response 的应用
这里调用 fetch() 函数来获取一张图片并将其显示在 HTML 的 IMG 标签中, fetch() 函数返回了一个 Promise,它使用与资源获取操作相关联的 Response 对象进行解析,由于正在请求一张图片,所以需要运行 response.blob(),以为响应提供正确的 MIME 类型。
const image = document.querySelector('.my-image');
fetch('flowers.jpg').then(function (response) {
return response.blob();
}).then(function (blob) {
const objectURL = URL.createObjectURL(blob);
image.src = objectURL;
});
也可以使用 Response.Response() 这样的构造方法,来创建自定义的 Response 对象:
const response = new Response();