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

  

  

Struts2 利用AJAX 导出大数据设置遮罩层的更多相关文章

  1. Winform .NET 利用NPOI导出大数据量的Excel

    前言:公司让做一个导出数据到Excel的小工具,要求是用户前端输入sql语句,点击导出按钮之后,将数据导出到Excel,界面如图所示:文件下端显示导出的进度 遇到的问题: 1.使用NPOI进行Exce ...

  2. Struts2.5 利用Ajax将json数据传值到JSP

    AJAX +JSON=>JSP AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着 ...

  3. ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK

    看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, 加入一个表10W数据,另一个表也是10万数据,当你用linq建立一个连接查询 ...

  4. C#通过OLEDB导出大数据到Excel

    C#导出数据到Excel,基本有两种方法,一种方法是通过Microsoft.Office.Interop.Excel.Application,一行一列的写入Excel中:另一种方法是通过OLEDB,利 ...

  5. ASP.NET MVC + EF 利用存储过程读取大数据

    ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK 看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, ...

  6. POI3.8解决导出大数据量excel文件时内存溢出的问题

    POI3.8的SXSSF包是XSSF的一个扩展版本,支持流处理,在生成大数据量的电子表格且堆空间有限时使用.SXSSF通过限制内存中可访问的记录行数来实现其低内存利用,当达到限定值时,新一行数据的加入 ...

  7. phpmyadmin导入导出大数据文件的办法

    在phpmyadmin的使用中,经常需要进行导入导出数据库的操作. 但是在导入导出大型数据库文件的时候经常会只是部分导出或者部分导入. 或者是导入导出不成功. 原因就是服务器和php.mysql限制了 ...

  8. 记录一笔关于PHPEXCEL导出大数据超时和内存溢出的问题

    通过查阅资料可以找到PHPEXCEL本身已经有通过缓存来处理大数据的导出了.但是昨晚一直没有成功,这可捉急了.最后想来想去就替换了phpExcel的版本了.最后就成功了.话不多说,代码附上 <? ...

  9. Office Open XML导出大数据

    Office Open XML导出大量数据到 Excel .NET使用Office Open XML导出大量数据到 Excel我相信很多人在做项目的都碰到过Excel数据导出的需求,我从最开始使用最原 ...

随机推荐

  1. Javascript 在严格模式下禁止指向 this

    如下代码, f() 输出的是 false,而 f2() 输出的是 true. 这是因为 f2 在严格模式下禁止 this 指向全局,所以 this 是 undefined, !this 当然是 tru ...

  2. Revit API 加载族并生成实例图元

    在Revit API中加载族可以使用Doc.LoadFamily方法,传入要加载的族文件路径名,但是这种方式有一种缺点,就是如果族文件在当前工程中没有加载的话则返回成功,如果已经加载过,则返回失败,也 ...

  3. junit 知识点

    JUnit 测试框架具有以下重要特性: 测试工具 测试套件 测试运行器 测试分类 测试工具 测试工具是一整套固定的工具用于基线测试.测试工具的目的是为了确保测试能够在共享且固定的环境中运行,因此保证测 ...

  4. yarn 知识点

    yarn 与 npm 功能对应表格: 命令 yarn npm 初始化 yarn init npm init 安装项目所有包(注意) yarn npm install 添加 dependencies y ...

  5. POJ3666序列最小差值

    题目:http://poj.org/problem?id=3666 dp方程可以是 d [ i ] [ j ] = min ( d [ i - 1 ] [ k ] ) + abs ( a [ i ] ...

  6. golang 自定义类型的排序sort

    sort包中提供了很多排序算法,对自定义类型进行排序时,只需要实现sort的Interface即可,包括: func Len() int {... } func Swap(i, j int) {... ...

  7. ionic使用常见问题(八)——PHP无法获取$http的post数据

    一个简单的post请求 $http.post('do-submit.php',myData) .success(function(){ // some code });   可是,用angularjs ...

  8. 【python】实例-用户登录系统

    有N,E,Q三个选择,若选择Q或者中断,则系统退出.若其他选项,则持续让用户选择. #!/usr/bin/env python db = {} def newuser(): prompt = 'log ...

  9. [转]使用Nginx实现反向代理

    使用Nginx实现反向代理 解释 正向代理的概念 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器这个代理服务器呢,他能访问 ...

  10. RedHat Enterprise Linux7.0安装Oracle12c

    1. 验证 1.1 硬盘空间要求 1.1.1 安装盘 类型 占用磁盘空间 Enterprise Edition 6.4GB Standard Edition 6.1GB Standard Editio ...