第一次遇到这种问题,需要在ajax响应中获取302状态码,然后根据该状态码做特殊处理;
背景
起因是这样的:ajax请求的时候,会有公共的登录拦截,如果未登录或登录标识过期,就直接302跳登录页了;后端不想多做处理,让前端来做这个判断,如果是302,前端手动控制跳登录页;
登录判断这么处理的还是第一次遇到,一般常用做法是后端判断,然后包成json格式,前端通过某个字段标识判断是否登录;
一方面和后端解释这不是常规做法的同时,一边查资料看能否在响应回调中获取到302状态码;
测试
这里分了三种情况来讨论302的问题;
- 同域,重定向的页面可以加载到;
- 同域,重定向的页面加载不到(404);
- 跨域的情况,重定向到一个其他域名的页面/地址;
测试代码在这儿,代码中,页面发出了三个 ajax 请求,服务器分别返回了上面的三种情况;
结论
1、同域,重定向的页面可以加载到,这种情况的成功回调中,XHR对象接收到的状态码为200,response为重定向页面的html代码;
2、同域,重定向的页面加载不到,这种情况的成功回调中,XHR对象接收到的状态码为404,response 为空;
3、跨域的情况,浏览器会报跨域的错,状态码是 0,XHR对象中的字段都是空或者null,因为报错,没有赋值;
同域的情况下,返回的状态码是由重定向到的页面状态码决定的,与当前的ajax请求无关;
这也说明了重定向页面响应结束后,ajax的回调才会被触发;
所以,根据上面的结论,在ajax回调中判断302状态码的方式就无法使用了;后端这个步骤还是不能省啊;