我使用以下代码通过 Fetch API 将用户位置发布到我自己的后端服务:
window.onload = () => {
let getPosition = (options) => {
return new Promise((resolve, reject) => {
navigator.geolocation.getCurrentPosition(resolve, reject, options);
});
};
getPosition().then(pos => {
const data = new FormData();
data.append('latitude', String(pos.coords.latitude));
data.append('longitude', String(pos.coords.longitude));
fetch('/', { // <--- error is thrown in this line
method: 'POST',
body: data
}).then(response => {
if (!response.ok) {
throw Error('Data sent - Network response NOT OK');
} else {
console.log('Data sent - Network response OK')
}
});
});
};
这完美地工作,后端服务发回一个肯定的空响应。 Data sent - Network response OK
记录在浏览器的控制台中,一切都很好,除了紧接着,这是记录:
为什么我会收到 Fetch failed loading: POST
即使 POST 成功,响应正常并且 Chrome 网络选项卡中的状态代码为 200 OK
?我的代码有问题吗?
最佳答案
我的行为与您所看到的相同。
我的服务器使用 204
(空响应)和空 (Content-Length=0) 响应响应 POST
请求。
我尝试将其更改为仅以“ok”消息响应(编辑:实际上现在只是返回创建的对象)并且 fetch
错误日志消失了。
在我看来,fetch
(至少在 Chrome 中)在响应主体为空时错误地记录“Fetch Failed”,即使请求成功也是如此。
关于javascript - 为什么我在实际工作时得到 "Fetch failed loading"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57477805/