重写ajax方法实现请求session过期时跳转登录页面
2017-06-08 19:11
846 查看
今天的任务是处理ajax请求session超时,如果session过期需要跳转到登录页面。
如果为每一个ajax请求都写上处理session超时的处理代码,太麻烦了。就算是写到公共方法里面,在每一个ajax请求的处理函数里引用,也是非常不保险的,万一有其他人或者新人写ajax请求,并没有加上这段公共代码,就会漏掉。
所以最好的方法是重写、扩展ajax方法,把异常集中处理。
在网上查到一个可行的方法,重写ajax,扩展success方法。代码如下:
我在使用过程中发现,我的请求也被重定向了,但是并不是触发success方法而是触发error方法。可参考:ajax在什么情况下走success和error
于是调整为重写ajax,扩展其error方法。
session超时触发error,代码如下:
以上扩展方法需要放在你的所有ajax请求之前执行。
把这段代码放在js的最开始执行。之后运行的ajax请求的success方法都将会加上关于session超时的处理,当然每个ajax自己的success方法也会保留并执行。
如何判断session超时
通过在error中打印xhr.status和error可以迅速定位session过期时的返回内容,并作为判断依据。例如:
在error方法中加上:
运行时输出:
于是,最后就通过xhr.status=="401" && error.indexOf('session') != -1判断session超时,并作出处理。
其他异常也可以通过这种扩展方法集中处理。
如果为每一个ajax请求都写上处理session超时的处理代码,太麻烦了。就算是写到公共方法里面,在每一个ajax请求的处理函数里引用,也是非常不保险的,万一有其他人或者新人写ajax请求,并没有加上这段公共代码,就会漏掉。
所以最好的方法是重写、扩展ajax方法,把异常集中处理。
在网上查到一个可行的方法,重写ajax,扩展success方法。代码如下:
jQuery(function($){ var _ajax=$.ajax; // 备份jquery的ajax方法 $.ajax=function(opt){ var _success = opt && opt.success || function(a, b){}; //获取ajax请求参数中的success方法; var _opt = $.extend(opt, { success:function(data, textStatus){ // 如果后台将请求重定向到了登录页,则data里面存放的就是登录页的源码,这里需要找到data是登录页的标记 //(这里是在文件中加了“weinianjie”然后注释掉。) if(data.indexOf('weinianjie') != -1) { window.location.href= Globals.ctx + "/login.action"; return; } _success(data, textStatus); //执行每个ajax自身的success方法 } }); return _ajax(_opt); //返回新的加入了session超时处理的ajax方法。 }; });
我在使用过程中发现,我的请求也被重定向了,但是并不是触发success方法而是触发error方法。可参考:ajax在什么情况下走success和error
于是调整为重写ajax,扩展其error方法。
session超时触发error,代码如下:
function addTimeOutAction(){ var _ajax = $.ajax; // 备份jquery的ajax方法 $.ajax = function(opt){ var _error = opt && opt.error || function(a, b, c){}; var _opt = $.extend(opt, { error: function (xhr,status,error) { if(xhr.status=="401" && error.indexOf('session') != -1) {//session timeout; sessionOut返回401错误 window.location.href= "登录页url"; return; } _error(xhr,status,error); } }); return _ajax(_opt); }; };
以上扩展方法需要放在你的所有ajax请求之前执行。
把这段代码放在js的最开始执行。之后运行的ajax请求的success方法都将会加上关于session超时的处理,当然每个ajax自己的success方法也会保留并执行。
如何判断session超时
通过在error中打印xhr.status和error可以迅速定位session过期时的返回内容,并作为判断依据。例如:
在error方法中加上:
console.log("xhr starus:"+xhr.starus); console.log("status:"+status); console.log("error:"+error);
运行时输出:
xhr starus:401 status:error error:session timeout
于是,最后就通过xhr.status=="401" && error.indexOf('session') != -1判断session超时,并作出处理。
其他异常也可以通过这种扩展方法集中处理。
相关文章推荐
- 重写ajax方法实现异步请求session过期时跳转登录页面
- 重写ajax方法实现异步请求session过期时跳转登录页面
- 重写ajax方法实现请求session过期时跳转登录页面
- 重写ajax方法实现异步请求session过期时跳转登录页面
- 重写ajax方法实现异步请求session过期时跳转登录页面
- 重写ajax方法实现异步请求session过期时跳转登录页面(转)
- 重写ajax方法实现异步请求session过期时跳转登录页
- 前台ajax重写方法搭配后台filter返回status实现ajax请求跳转登录页面
- 重写ajax方法实现异步请求session过期时跳转
- ajax前置处理实现异步请求session过期时跳转登录页面
- 处理jquery的ajax请求session过期跳转到登录页面
- 重写 ajax 实现 session 超时跳转到登录页面实例代码
- 当 jquery 发送 ajax 请求的时候遇到服务端session过期超时返回 302 跳转登陆页面的时候怎么办的处理方法
- Ajax 提交请求,Session过期,跳转到登录页
- 记录问题:登录session过期,ajax请求被web security拦截,页面没有数据且没有重定向到login页面
- 重写ajax实现session超时跳转到登陆页面
- 实现session超时后自动跳转到登陆页面(前台JS,JAVA,判断是否Ajax请求)
- Struts 通过拦截器实现登录后跳转到登录前页面 处理普通Http请求和Ajax请求时拦截配置
- Ajax 实现session过期后退出到登录页面
- Ext6.x+springmvc+shiro框架下实现session过期跳转到登录页面