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

  • 相关阅读:
    JS键盘码值表
    JS入门笔记
    CSS居中的方法总结
    CSS布局模型思考
    条件、循环、函数定义、字符串操作练习
    Python输入输出练习,运算练习,turtle初步练习
    如何理解Comparator接口中的升降序?
    12个非常实用的JavaScript小技巧
    JAVA泛型知识(一)
    开窗函数简介
  • 原文地址:https://www.cnblogs.com/daimaBYG/p/3465864.html
Copyright © 2020-2023  润新知