jquery ajax session超时处理

使用jquery进行超时处理,后台用springmvc来接受Ajax请求(根据req.getHeader判断),假如超时,在请求头中设置sessionstatus为timeout。

// 判断如果没有取到用户信息,就跳转到登陆页面
        if (user == null || user.getuName() == null
                || "".equals(user.getuName())) {

            if (req.getHeader("x-requested-with") != null
                    && req.getHeader("x-requested-with").equalsIgnoreCase(
                            "XMLHttpRequest"))// 如果是ajax请求响应头会有,x-requested-with;
            {
                res.setHeader("sessionstatus", "timeout");// 在响应头设置session状态
                logger.info("==== Get AJAX timerout");
                return ;
            }
            // 跳转到登陆页面
            res.sendRedirect(req.getContextPath() + "/user/loginPage.action");
        } else {
            // 已经登陆,继续此次请求
            logger.info("sessionId:" + session.getId());
            chain.doFilter(request, response);
        }

前台注册jquery的全局事件,判断从后台返回的请求头

var ctx = document.getElementById("ctx").value;
             $.ajaxSetup({
                    contentType : "application/x-www-form-urlencoded;charset=utf-8",
                    complete : function(XMLHttpRequest, textStatus) {
                    var sessionstatus = XMLHttpRequest
                            .getResponseHeader("sessionstatus"); // 通过XMLHttpRequest取得响应头,sessionstatus,
                    if (sessionstatus == "timeout") {
                        alert("会话超时");
                        // 如果超时就处理 ,指定要跳转的页面
                        window.location.replace(ctx+"/user/loginPage.action");
                    }
                }
            });

这样,判断session超时后,js控制将页面跳转至指定页面。
需要注意的是,ajaxSetup中的complete的function需要在一般ajax请求的success方法处理return后才处理,需要对success中的data做空值判断,例如:

    $.ajax({  
                                url:ctx+"/init/listUndeployedVM.action",  
                                type:'get',  
                                //data:'name=admin&password=123456',    //向服务器提交的代码
                                dataType:'json',                        //规定从服务器返回的数据形式
                                success:function(data,status){
                                       if(data == null){
                                           return ;
                                       }

不然前台会在使用data处报错卡住。

posted @ 2013-12-09 18:14  代码の搬运工  阅读(635)  评论(0编辑  收藏  举报