zoukankan      html  css  js  c++  java
  • 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处报错卡住。

  • 相关阅读:
    Docker,用任何工具链和任何语言来构建任何应用
    从Docker在Linux和Windows下的区别简单理解Docker的层次结构
    Docker在Windows下的安装以及Hello World
    (译)学习如何构建自动化、跨浏览器的JavaScript单元测试
    由Python的super()函数想到的
    PS:蓝天白云的制作
    PS:缝线颜色随着鞋帮颜色的改变发生改变.files
    Windows8 64位运行Silverlight程序不能访问WCF的解决方案
    背景图片之background的用法
    12306订票助手更新
  • 原文地址:https://www.cnblogs.com/daimaBYG/p/3465864.html
Copyright © 2011-2022 走看看