我试图重定向到另一个页面后,我收到一个响应从post取回,但正如标题所说,它不工作。
以下是函数:
// send/post json
async function postData(json_data, api_path) {
const response = await fetch(api_path, {
method: "POST",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
},
body: json_data,
redirect: 'follow'
});
console.log("postData response: ", response);
return response;
}
// send JSON data to server on /api/${destination}
function saveSettings(form, destination) {
let json_data = toJSONstring(form);
let res;
console.log(json_data);
postData(json_data, `/api/${destination}`)
.then((response) => {
res = response;
if (!response.ok) {
throw new Error(`HTTP error, status = ${response.status}`);
}
return response.text();
}).then(text => {
if (destination === 'network/post') {
connected = false;
updatingToast(`You are no longer connected to the device !`, false);
updatingToast(`Please navigate to ${text}`, true, text);
}
console.log('res: ', res);
res.redirect(res.status, res.url);
});
}
每个console.log();
返回Response {type: 'basic', url: 'http://192.168.0.100/dashboard', redirected: true, status: 200, ok: true, …}
如果我把response.redirect(response.status, response.url);
放在第一个then()
中,我得到同样的错误。
响应也是如此。在香草JS中存在重定向吗?
我不想使用window.location.href
或任何其他类似的选项,因为它绕过HTTP认证头。
我看到你在fetch中给出了'follow'参数
您可以使用下面的代码检查响应是否被重定向。如果没有重定向,您可以简单地更改窗口位置并强制重定向。
if (res.redirected) {
window.location.href = res.url;
}
编辑:
在对重定向方法做了更多的研究之后,我发现您需要切换URL和状态变量,参见:https://developer.mozilla.org/en-US/docs/Web/API/Response/redirect