处理session过期(401)身份过期用户重新登陆的方法之重写ajax

前言

之前在项目中遇到一个问题,就是在项目中为了安全起见,设置session的有效期限,当用户登录超过这个有效期限,希望用户重新验证自己的身份,证明是本人的操作,需要要用户重新登陆,即当session过期时,用户操作与服务器发生交互,服务器返回401的状态码,跳转回到登录页面,让用户重新登陆的过程,这并不难实现,且看如下代码:

$.ajax({
    url:'请求地址',
    type:'POST',
    data:null,//向服务器发送的数据,这里用于演示,设为null
    success:function(data){
        //请求成功
    },
    error:function(xhr, textStatus, errorThrown){
        //请求失败
        //通过状态码判断401
        if (xhr.status === 401) {
            alert('您好,身份验证已过期,请重新登陆。');
            //返回首页
            window.location.href = '首页的地址';
        }
    }
});

这样就很轻松的实现了需求,但是,现在问题来了,当项目中已经写了成百上千的ajax请求时,有的是$.load函数,有的是$.loadScript或$.get等等,领导说要做这个功能,你怎么办?一个个在error的函数中加401状态判断的代码吗?那样可以把自己玩死,这时很容易就想到,重写jquery的ajax方法,但是为什么是$.ajax()这个方法呢?因为这个方法是jquery ajax请求的最底层的方法。代码如下:

//重写ajax方法
jQuery(function($) {
    // 备份jquery的ajax方法
    var _ajax = $.ajax;
    $.ajax = function(opt) {
        var _error = opt && opt.error || function(a, b, c) {};
        //修改传入对象的error函数
        var _opt = $.extend(opt, {
            error: function(xhr, textStatus, errorThrown) {
                //通过状态码判断401
                if (xhr.status === 401) {
                    alert('您好,身份验证已过期,请重新登陆。');
                    //返回首页
                    window.location.href = '首页的地址';
                    return;
                }
                _error(xhr, textStatus, errorThrown);
            }
        });
        //注意这里需要返回_ajax(_opt),否则在链式调用时会报错
        return _ajax(_opt);
    };
});

这样就不需要在每个ajax请求的方法中添加状态码判断的代码了,由此可见,在代码编程中重写框架的方法也是很重要的一项技能。

参考链接 http://blog.csdn.net/nohero1/article/details/41517163

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值