为了账号安全,请及时绑定邮箱和手机立即绑定

前端有没有统一跳转的工具

前端有没有统一跳转的工具

慕尼黑5688855 2018-10-12 17:35:20
开发环境:前端react后端java原来是在返回值中看code是多少,来决定是否跳转到登录界面。只在某几个接口设置了跳转。现在未登录状态下,后端的接口都会返回401.有没有什么工具,能统一设置。对于所有的接口,如果请求接口返回状态是401就跳转到登录页面去?
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

// 拦截ajax请求,检测是否超时,以重新登录

$(document).ajaxComplete((event, xhr, settings) => {

    if (xhr.status === 200) {

        if (settings.dataType === 'json' && xhr.responseJSON !== void 0) {

            let result = xhr.responseJSON;

            if (2001 === result.code) {

                // 没有session登录信息时跳转至登录页

                global.location.href = "/main-login.html";

            }

        }

    } else if (xhr.status === 401) {} else {

         global.location.href = "/main-login.html";

    }

});

export default function(options) {

    const defaultOptions = {

        dataType: 'json',

        cache: true,

        jsonp: 'callback'

    };

    options.data = processRequest(options);

    //url这里加一些代理路径。。。

    options.url = options.url;


    options.headers = {

        "Accept": "application/json",

        "Content-Type": "application/json"

    };


    return $.ajax({...defaultOptions, ...options }).then(processResponse);

};

// 标准化传给后台的参数

function processRequest(r) {

    const str = r.data || {};

    if ('get' == r.method) {

        if ($.isEmptyObject(str) || null == str) {

            return {

                t: new Date().getTime()

            };

        } else {

            return {

                //添加时间戳随机数

                params: JSON.stringify(str),

                t: new Date().getTime()

            };

        }

    } else {

        return JSON.stringify(str);

    }

}


// 标准化后台相应数据格式

function processResponse(r) {

    let str = {};

    if (r.rows) {

        str = r;

        str.code = 0;

        str.list = r.rows;

        delete str.rows;

    } else {

        if (!r.error) {

            if (0 <= r.code) {

                str = r;

            } else {

                str.code = 0;

                str.data = r;

            }

        } else {

            str.code = -1;

            str.message = r.message || r.error;

        }

    }

    return str;

}


查看完整回答
反对 回复 2018-10-27
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

难道你的每个接口都直接调用了XMLHttpRequest吗?
建议将XMLHttpRequest封装成ajax方法提供给调用接口使用,在这个ajax方法中对返回的body json的状态码进行判断及跳转

查看完整回答
反对 回复 2018-10-27
  • 2 回答
  • 0 关注
  • 808 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信