前提
使用了三方库 js-cookie
过程
- 将导出button置为disable。
- js添加一个10分钟过期的cookie。
- js使用window.location(ajax不能使用字节流)调用后端导出excel接口。
- java处理请求:删除cookie,流的方式输出excel到页面。
- js使用jquery的setInterval()设置一个每1秒运行一次,运行600次的定时任务(10分钟),监听cookie的值,当cookie为空时,将导出button置为enable。
核心代码
JavaScript
$("#export").click(function(){
$(".mask").css("display","none");
$(".exportdiv").css("display","none");
var exportdata = document.getElementById("Searchinput").value;
$("#btn5Search").trigger("click");
// set cookie
var inTenMinutes = new Date(new Date().getTime() + 10 * 60 * 1000); // cookie expire after 10 minutes
Cookies.set('serviceExportStatus', '0', { path: '/', expires: inTenMinutes });
// export request
window.location="${ctx}/service/exportExcel.action?exportdata="+exportdata;
// listening export finish
var count = 0;
var timer = setInterval(function(){
count++;
console.log("in timer" + count);
if(count > 600 || Cookies.get('serviceExportStatus') == null){
console.log("in finish export");
$("#export").attr('disabled',false);
$("#export").css('background','#000');
clearInterval(timer);
}
},1000);
});
Java:
Cookie cookie = new Cookie("serviceExportStatus", "1");
cookie.setMaxAge(0);
cookie.setPath("/");
response.addCookie(cookie);