在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)
行,则一切正常。
为什么?
答案 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);