如果 Javascript fetch 获得重定向,如何重定向到调用页面

问题描述 投票:0回答:1

我有一个情况,我正在调用

fetch()
,如果响应是 302 重定向,我想将调用页面重定向到它重定向到的任何位置,而不是按照重定向来检索数据。

场景是用户在页面上执行某些操作,该页面将执行提取操作以检索要在页面上更新的内容。 但如果他们的登录会话已过期,服务器将返回 302 重定向到登录页面。 我的 Javascript 期望返回 JSON 响应,但

fetch
遵循重定向并获取 HTML 页面。 我真正想做的是检查
response.status
是否为302,获取重定向指向的URL并设置
window.location

根据文档,我应该能够设置

redirect: "manual"
,然后如果
response.redirected
为true,则重定向到
response.url
,或者有些人说从响应中检索
location
标头

但是这些都不起作用。

  • response.redirected
    从来都不是真的。
  • response.status
    为零。
  • response.url
    是发出调用的页面的 URL,而不是重定向到的页面。
  • location
    标头为空。

唯一有效的是“网络”选项卡显示服务器返回了 302 状态。 这是我的代码:

   fetch("url-that-forces-a-redirect", {
       method: "POST",
       redirect: "manual",
       body: formData
    }).then((response) => {
       console.log("Response had status " + response.status);
       if (response.redirected) {
           var redirectedUrl = response.headers.get('location');
           console.log("Got redirect: location header = " + redirectedUrl);
           console.log("                 response.url = " + response.url);
           // window.location = redirectedUrl;
           return;
       }
    });

有什么办法可以做到这一点吗?

顺便说一句,我首先尝试使用 XMLHttpRequest 执行此操作,但也找不到方法来执行此操作。

javascript http-redirect fetch-api
1个回答
0
投票

我认为这不是正确的方法。如果ajax页面发送http重定向状态,这意味着ajax被移动到另一个地方,而不是调用页面。

ajax 页面应该返回正确的 200 Ok 回复,并带有参数,您可以在 json 响应中决定名称,告诉调用页面进行重定向。

内页可以返回如下回复:

 {status:"ok", forceRedirectTo: "http://www.page.com", ...}

外页可以测试:

if(reply.hasOwnProperty(forceRedirectTo)) { window.location =forceRedirectTo; }

© www.soinside.com 2019 - 2024. All rights reserved.