Response: bodyUsed 属性

Baseline 已广泛支持

此特性已得到良好确立,可跨多种设备和浏览器版本使用。自 2017 年 3 月起,所有浏览器均支持此特性。

注意:此功能在 Web Workers 中可用。

Response 接口的只读属性 bodyUsed 是一个布尔值,用于指示响应体是否已被读取。

一个布尔值。

示例

检查 bodyUsed

本示例说明读取响应体后,bodyUsed 的值会从 false 变为 true

示例包含一个空图片。

当示例的 JavaScript 运行时,我们会获取一个图片,并将返回的 Promise 赋值给变量 responsePromise

当用户点击“使用响应”时,我们会检查响应是否已被使用。如果已被使用,我们会打印一条消息。如果尚未被使用,我们会读取响应体,并用它为图片的 src 属性提供值。

HTML

html
<p><button id="use">Use response</button> <button id="reset">Reset</button></p>
<p><img id="my-image" src="" width="150" /></p>
<pre id="log"></pre>

JavaScript

js
const useResponse = document.querySelector("#use");
const reset = document.querySelector("#reset");
const myImage = document.querySelector("#my-image");
const log = document.querySelector("#log");

const responsePromise = fetch(
  "/shared-assets/images/examples/firefox-logo.svg",
);

useResponse.addEventListener("click", async () => {
  const response = await responsePromise;
  if (response.bodyUsed) {
    log.textContent = "Body has already been used!";
  } else {
    const result = await response.blob();
    const objectURL = URL.createObjectURL(result);
    myImage.src = objectURL;
  }
});

reset.addEventListener("click", () => {
  document.location.reload();
});

结果

最初,图片没有值。如果您点击“使用响应”一次,则 bodyUsedfalse,因此我们读取响应并设置图片。如果您再次点击“使用响应”,则 bodyUsedtrue,我们会打印消息。

点击“重置”可以重新加载示例,以便您再次尝试。

规范

规范
Fetch
# ref-for-dom-body-bodyused①

浏览器兼容性

另见