前台代码
实现逻辑其实是通过cookie来确定是否已经导出完毕,前台定时查询cookie,后台下载完毕后向cookie存入值
1、页面引用
<link rel="stylesheet" href="../Js/layer/skin/layer.css" />
<script type="text/javascript" src="../Js/layer/layer.js"></script>
2、ajax请求中应用
<script type="text/javascript">
var loadingFlag;
//由于ajax不支持导出,因此使用重定向
/*$.ajax({
url: "../FlightHandler/JDFlightHandler.ashx",
type: "post",
data: info,
dataType: "text",
beforeSend: function (XMLHttpRequest) {
//注意,layer.msg默认3秒自动关闭,如果数据加载耗时比较长,需要设置time
loadingFlag= layer.msg('正在读取数据,请稍候……', { icon: 16, shade: 0.01,shadeClose:false,time:60000 });
},
success: function (data) {
layer.close(loadingFlag);
},
complete: function (XMLHttpRequest, textStatus) {
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
}
});*/
layui.config({base: '${path}' + LayuiConfig.layuiLibPath}).use(['form', 'laydate', 'laypage', 'laytpl', 'tablePlug'], function () {
form.on('submit(f_export)', function (data) {
loadingFlag = layer.msg('正在导出数据,请稍候……', {icon: 16, shade: 0.01, shadeClose: false, time: 60000});//设置最长时间一分钟
window.location.href = "${path}/export?" + parseParam(formData);
testCookie();
}
});
//检测方法 查看cookie是否写入,写入证明已导出
function testCookie(){
debugger;
console.log(getLoadingFlagCookie("loadingFlag"));
if(getLoadingFlagCookie("loadingFlag")){
//关闭加载样式
layer.close(loadingFlag);
//设置cookie立即过期清除标志cookie
debugger;
var date = new Date();
document.cookie = "loadingFlag=''; expires="+date.toGMTString()+" ; path=/";
}else{
//500ms检测一次,根据实际情况修改
setTimeout("testCookie()",500);
}
}
//根据名称获取cookie,项目cookie数量多的话可以做优化
function getLoadingFlagCookie(name){
//debugger;
var strcookie = document.cookie;//获取cookie字符串
var arrcookie = strcookie.split("; ");//分割
//遍历匹配
for ( var i = 0; i < arrcookie.length; i++) {
var arr = arrcookie[i].split("=");
if (arr[0] == name){
return arr[1];
}
}
return "";
}
</script>
后台代码
只用存入cookie即可
//生成Excel
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), tClass, outputData);
//设置cookie防止导出时间过长,重复点击
Cookie cookie = new Cookie("loadingFlag", "true");
cookie.setPath("/");
response.addCookie(cookie);
workbook.write(response.getOutputStream());