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请求的一些合理小利用,如果有其他方式的话,希望大家能指导下,不吝感激!
浙公网安备 33010602011771号