ajax session超时的处理

我使用的Struts2,配置的LoginInterceptr拦截器,所有请求除了登录请求外都会先经过拦截器,在拦截器里获取Session信息,判断用户信息是否存在,因为如果Session超时,Session中的信息是会被清除掉的。

所有如果Session已超时,对于非Ajax请求,会直接重定向到登录页面,但是对于Ajax请求则不会,这里给出解决方案,经过测试,绝对可行!当然如果有其他方法也请大家指出:

jquery 用的是query-1.6。直接上代码

 

 

            $.ajax({
                url: "${base}/sms_create!send.action",
                data:"content="+content+"&yema="+yema+"&timing="+timing,
                type: "POST",
                dataType:"json",
                success: function(data) {

        //成功处理的代码
                },

       //关键代码
                complete:function(XMLHttpRequest,textStatus){
                    if(textStatus=='parsererror'){
                        window.location='';//此处可以设置session超时后跳转的路径
                    }
                }
            });

 

其他的jquery版本还没有测试,查看返回的textStatus就好了,当超时总会返回数据,判断后,设置跳转路径就ok了,这是最简单的写法,不用设置太多别的东西。

网上还盛传的设置jquery全局变量,正在实验,成功后会贴出代码。

 

 

-

--------------------------------------------------修改意见------------------------------------------------

直接上代码,上面的那种方式,应用的时候,会出现一点点偏差,如果说,不是系统session失效的错误的话,也会跳转,这时,可以做一些修改,利用XMLHttpRequest获得到返回的数据。

var result=XMLHttpRequest.responseText;一般情况下,系统session超时的时候返回的都是登录首页,这时可以在首页中设置一个比较特殊的字符或者标记。

判断result中是否含有这个标记,如果含有标记的result,那就说明,response返回的是首页,可以定位是session失效。这时候跳转即可:

                complete:function(XMLHttpRequest,textStatus){
                     var result=XMLHttpRequest.responseText;
                     //alert(result);
                     if(result.indexOf('特殊字符或标记')>-1){
                         window.location='跳转路径';
                     }
                }

 

 

这种方法只是对jquery的ajax请求的一些合理小利用,如果有其他方式的话,希望大家能指导下,不吝感激!

posted @ 2012-09-18 10:09  莫风coder  阅读(836)  评论(0)    收藏  举报