重写ajax方法实现异步请求session过期时跳转登录页面

前端之家收集整理的这篇文章主要介绍了重写ajax方法实现异步请求session过期时跳转登录页面前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转载自:http://www.jb51.cc/article/p-eqfagpnq-bcn.html


一般我们会在过滤器里判断登录状态,如果没登录跳转登录页面,过滤器Java核心代码如下:

[java] view plain copy
  1. UserItemloginUser=(UserItem)request.getSession().getAttribute("loginUser");
  2. if(loginUser==null){
  3. response.sendRedirect("/login.action");
  4. }
这个对于普通页面来说完全没问题,但是在使用ajax的时候往往得不到想要的效果。因为页面根本没跳转,只是捕获到了登录页面的源码而已。

网上一堆庸人给出一堆扯蛋的方法,主要有。

1.返回的字符串附加登录状态;(那么多,你愿意改么,而且前后端都得改,编码的时候还要总去考虑那个状态烦不烦)

2.修改http头信息;(装B深沉型)

3.修改jQuery文件判断;(勉强算个程序员,但是尽力不去动源,性能问题你还得解压再压缩,别人也不一定知道你改过源码)

我的解决方案跟第三种方法思路接近,重写ajax方法实现前置处理,代码如下:

[javascript] copy
    jQuery(function($){
  1. //备份jquery的ajax方法
  2. var_ajax=$.ajax;
  3. //重写ajax方法,先判断登录在执行success函数
  4. $.ajax=function(opt){
  5. var_success=opt&&opt.success||function(a,b){};
  6. var_opt=$.extend(opt,{
  7. success:function(data,textStatus){
  8. //如果后台将请求重定向到了登录页,则data里面存放的就是登录页的源码,这里需要找到data是登录页的证据(标记)
  9. if(data.indexOf('weinianjie')!=-1){
  10. window.location.href=Globals.ctx+"/login.action";
  11. return;
  12. }
  13. _success(data,textStatus);
  14. });
  15. _ajax(_opt);
  16. };
  17. });

登录页面的源码里面,你随便找个地方打个标记然后隐藏掉,比如我的标记就是weinianjie。对于$.get和$.post就不用说了吧,这两个方法都是调用了$.ajax方法的,所以也就自动获取了前置判断能力。

大功告成,注意以上扩展需要放在你的所有ajax请求之前执行。


说明:Globals.ctx 可以通过以下函数获取

@H_301_230@ function getRootPath() { // var pathName = window.location.pathname.substring(1); // var webName = pathName == '' ? '' : pathName.substring(0,pathName.indexOf('/')); // return window.location.protocol + '//' + window.location.host + '/' + webName + '/'; return window.location.protocol + '//' + window.location.host; }

猜你在找的Ajax相关文章