在Safari 11.1中获取 - 使用控制台日志的请求不起作用(不支持ReadableStream上载)

时间:2018-04-16 06:18:15

标签: javascript safari fetch

在Safari浏览器的最后一次更新(到11.1)后,我注意到我的提取代码停止工作。

代码:

const options = {
  method: 'POST',
  credentials: 'include',
  body: '{"id":"xxx","note":"yyy"}',
  headers: {}
};


options.headers = new window.Headers();
options.headers.append('Content-Type', 'application/json; charset=utf-8');

function getRequest() {
  return new window.Request('https://jsonplaceholder.typicode.com/posts', options);
}

const newRe = getRequest();

console.log(newRe);

fetch(newRe)
  .then((response) => {
    return response.json();
  })
  .then((jsonObject) => {
  console.log(jsonObject)
    document.write(`ID ${jsonObject.id} was created!`);
  })
  .catch((error) => {
    document.write(error);
  });

这里是Codepen:https://codepen.io/anon/pen/BrXoqG

Safari 11.1上的

返回错误:'NotSupportedError:不支持ReadableStream上传'。 但是,如果您删除console.log(newRe)行,则一切正常。

为什么?

1 个答案:

答案 0 :(得分:1)

Safari似乎不支持使用具有Request方法的POST对象进行抓取;可能是因为现在构造Request对象时,主体包裹在ReadableStream中。

您可以将Request对象转换为参数元组:

const body = await request.clone().text();
const {cache, credentials, headers, integrity, mode, redirect, referrer} = request;
const init = {body, cache, credentials, headers, integrity, mode, redirect, referrer};
fetch(request.url, init);