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处报错卡住。

你可能感兴趣的:(jQuery ajax)