zoukankan      html  css  js  c++  java
  • Struts2 利用AJAX 导出大数据设置遮罩层

    Struts2 利用AJAX 导出大数据设置遮罩层

    需求背景:

    每次我们导出excel的时候 ,如果数据量很大,导出花费的时间会很长,页面却有没人任何反应,这个时候用户会认为系统有问题,要么关了页面,要么狂点导出。感知太差了~甚至用户误操作会导致服务器崩溃。
    所以我么我们需要通过进度条方式告知客户导出的进度。
    通过在导出过程中循环请求后台确认时候导出完毕来控制遮罩层在某个时候关闭。

    解决办法:

    之前反复用了N种方式都没有解决类似问题,

    1、iframe 方式 最终拜拜

    2、ajax 方式  ajax 无法弹出download下载流框 拜拜 

    重点来了

    思路!
    1、JS 设置定时器 以1s 的访问去请求Action 

    2、Action 设置一个检测session 是否有效的方法 

    3、导出动作

    // show遮罩层
                    parent.Q.mask('数据正在导出中... ');
                    // 检测后台session 是否有效 
                    var isExportUrl = parent.Q.URL +'/cr/isExport.action?_='+new Date().getTime();
                    location.href = parent.Q.URL +'/cr/exportCopyrightEnd.action?form.queryInfo.copyrightStatus=0&_='+new Date().getTime();
                }

    2、isExportAction()

      

     public void isExport()
        {
          // 获取session 判断导出是否结束 String exportFlag
    = (String)ActionUtil.getSession().getAttribute("exportFlag"); if (StringUtils.isEmpty(exportFlag)) { try { ActionUtil.str2response("success"); } catch (IOException e) { DEBUGGER.error("Failed to isExport", e); e.printStackTrace(); } } }

    3、

            // 在导出结束 删除session    
        ActionUtil.getSession().removeAttribute("exportFlag");

    4、页面JS 只需要设置timer 请求后台isExport() 即可

      通过setInterval 方法循环请求后台获取exportedFlag, 一旦后台返回success(导出完毕),则关闭遮罩层

      

     // 设置一个定时器 
                    var timer = setInterval(function(){
                        $.ajax({
                            url: isExportUrl,
                            type:'post',
                            success: function(data){
                                if(data ==='success'){
                                    clearInterval(timer);
                                    // 关闭遮罩层
                                    parent.Q.unmask();
                                }
                            },
                            error:function(e){
                                console.log(e.responseText);
                            }
                        }); 
                      }, 1000); //1s

      

      

  • 相关阅读:
    Ambiguous mapping. Cannot map 'labelInfoController' method
    在写ssh项目时浏览器页面出现http status 404 – not found
    JS页面出现Uncaught SyntaxError: Unexpected token < 错误
    Data truncation: Truncated incorrect DOUBLE value:
    个人最终总结
    结对编程--黄金点游戏
    Windows操作系统----锁住命令行窗口
    Windows操作系统下给文件夹右键命令菜单添加启动命令行的选项
    命令行下运行 java someClass.class出现 “错误:找不到或无法加载主类someClass ” 的解决方案
    Qt Quick程序的发布
  • 原文地址:https://www.cnblogs.com/XQiu/p/5576846.html
Copyright © 2011-2022 走看看