您的位置:首页 > 其它

Ajax 请求session过期的统一处理

2015-04-29 14:05 253 查看
web项目中,如果一个页面长时间没有操作,而session已经过期了,这时如果执行一些操作,比如查询 编辑 等ajax请求,如果使用的是jquery $.post()方法,即使后台判断session过期,进行转发,前台也不会有响应,而对用户造成一定的困惑。

使用jquery提供的一些全局的ajax事件可以解决这一问题:

ajaxComplete()函数用于设置当AJAX请求完成(无论成功或失败)时执行的回调函数。

这是一个全局AJAX事件函数,用于为所有AJAX请求的ajaxComplete事件绑定事件处理函数。当AJAX请求完成(无论成功或失败)时,将触发ajaxComplete事件,并执行绑定的事件处理函数。

该函数必须在jQuery对象实例上调用,ajaxComplete()将为每个匹配元素的ajaxComplete事件绑定处理函数。当AJAX请求完成后,所有匹配元素上的处理函数都将被触发执行。事件处理函数内的this将指向当前DOM元素。

你可以在同一元素多次调用该函数,从而绑定多个事件处理函数。触发ajaxComplete事件时,jQuery会按照绑定的先后顺序依次执行绑定的事件处理函数。

注:从jQuery 1.8开始,该函数只能为document对象的ajaxComplete事件绑定处理函数,为其他元素绑定的事件处理函数不会起作用。

如果在jQuery.ajax()或jQuery.ajaxSetup()中将选项参数global设为false,可以禁止该AJAX请求触发全局的AJAX事件。

例:

$(document).ajaxComplete(function(event,request, settings){
//do something you want...
// e.g. if timeout then  goto you login page.... top.location.href="login.jsp"
});


ajaxSetup

/**
* ajaxSetup 可以设置未来(全局)的AJAX请求默认选项
* 主要设置了AJAX请求遇到Session过期的情况
*/
$.ajaxSetup({
type: 'POST',
complete: function(xhr,status) {
var sessionStatus = xhr.getResponseHeader('sessionstatus');
if(sessionStatus == 'timeout') {
var top = getTopWinow();
var yes = confirm('由于您长时间没有操作, session已过期, 请重新登录.');
if (yes) {
top.location.href = '/skynk/index.html';
}
}
}
});

/**
* 在页面中任何嵌套层次的窗口中获取顶层窗口
* @return 当前页面的顶层窗口对象
*/
function getTopWinow(){
var p = window;
while(p != p.parent){
p = p.parent;
}
return p;
}


参考:

/article/5899306.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: