302状态轴的响应未定义

时间:2019-02-03 07:17:41

标签: ajax typescript axios identityserver4

我正在使用带有打字稿的axios。

我有一个编码如下的简单axios拦截器。

// Add a response interceptor
axios.interceptors.response.use((response: AxiosResponse<any>) => {
  // Do something with response data
  return response;
}, (error: any) => {
  // Do something with response error
  // Here "error.response" is undefined. 
  return Promise.reject(error);
});

我想做的是,未经身份验证时,我需要重定向到其他位置(Identityserver SSO页面,但这与此处无关)。

因此,在调用我的API时,如果未通过正确的位置进行身份验证,则会返回302状态代码。

,但是该axios不会自动重定向到该位置。

如果我必须手动重定向,那还是可以的。

但是我得到的“ error.response”未定义。

那么现在如何重定向?因为“ error.response”未定义,我无法检测状态代码。

在“网络”标签中,其显示如下。

enter image description here

响应选项卡显示如下。没有可用的响应数据... !!!

enter image description here

我在做什么错了?

2 个答案:

答案 0 :(得分:2)

据我了解,302代码是由浏览器处理的。回答302之后,浏览器将接收由位置标头传递的页面,并将其传递给Axios。因此,您可以在response.data中找到html页面。同样在response.request.responseURL中,您可以找到需要重定向到的URL。

所以我做了这样的事情:

axios.post('.', Data)
     .then(response => {
         if (response.status === 200) {
             window.location.href = response.request.responseURL;
         }
     })
     .catch(error => {console.log(error)});

现在对我有用。

答案 1 :(得分:0)

我认为以下是该问题的答案。还是我不确定。

所以不要标记为答案。

https://www.sean-lan.com/2017/08/15/fetch-meets-302/

Ajax无法处理302个请求... !!!

由浏览器处理... !!!

似乎与以上链接的参考文献相同。