第一篇博文,mark一下zhq[0]。
问题描述:用户页面,当session过期或都session注销后,普通页面后端都会有过滤器,session过期Redirect到登录页面,但是ajax请求后端只会返回登录页面源码并不跳转。
网上有很多方法1.返回的字符串附加登录状态2.修改http头信息;3.修改jquery源文件判断;综合比较还是以下方法最方便更易维护。个中缺点大家应该都明了就不赘述。
解决方案:
jQuery(function($){ // 备份jquery的ajax方法 var _ajax=$.ajax; // 重写ajax方法, $.ajax=function(opt){ var _success = opt && opt.success || function(a, b){}; var _error = opt && opt.error || function(a, b){}; var _opt = $.extend(opt, { success:function(data, textStatus){ // 如果后台将请求重定向到了登录页,则data里面存放的就是登录页的源码,这里需要判断(登录页面一般是源码,所以这里只判断是否有html标签) if(data.indexOf('html') != -1) { window.location.href= "http://www.baidu.com"; return; } _success(data, textStatus); }, error:function(data, textStatus){ if(data.responseText.indexOf('html') != -1){ window.location.href= "http://www.baidu.com"; return; } _error(data, textStatus); } }); return _ajax(_opt); }; }); });
我遇到的是分页ajax,请求getList.html页面,session过期后端会把请求跳到login.html; 这里其实ajax执行的是error,所以只需给error一个前置处理就可以了。