excel文件导出进度条的实现

在Excel文件下载时,因数据导出请求方法会关闭请求,无法获取返回标识关闭进度条。为此,前端隐藏div作为标识,点击下载开启进度条,后台移除上次标识,导出结束后在session存放结束标识,前端定时请求session,确认后关闭进度条。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

 在做excel文件下载时 发现数据导出请求方法中response.getOutputStream().close(); 会关闭请求 从而得不到返回的标识来关闭进度条,故结合网上资料做了如下功能。

功能概要:

   前端先隐藏一个div来做是否关闭的标识,点击下载后开启进度条显示,之后进入后台 后台开始时先移除上次的关闭进度条标识(request.getSession().removeAttribute("endflag");) 在导出逻辑最后在session中存放标识标识该关闭进度条了 (request.getSession().setAttribute("endflag", "1");); 前端在写一个定时任务来请求session中查看结束标识,当确认是结束标识是结束定时任务并关闭进度条。

<a href="javascript:void(0)" onclick="showMenu()" class="easyui-linkbutton" iconCls="icon-downtemplate" plain="true">导出</a>
		<div id="menuid" class="easyui-menu" style="width:120px;">
		    <div data-options="iconCls:'icon-add'">
				<a href="javascript:void(0)" style="text-decoration:none;out-line: none;color:#3C3C3C;" onclick='exportInfo("EXCEL")'>导出为.EXCEL</a>
			</div>
		    <div class="menu-sep"></div>
		    <div data-options="iconCls:'icon-add'"> 
		           <a href="javascript:void(0)" style="text-decoration:none;out-line: none;color:#3C3C3C;" onclick='exportInfo("TXT")'>导出为.TXT</a>
		    </div>
		</div>
<input   type="hidden" id="divloads" name="bondname" value="0"> 
//导出菜单栏
function showMenu(){
		$('#menuid').menu('show', {
			 //left: 200,
			  top: 30
		});
	}
function exportInfo(name){
		$("#divloads").val("0")
		$.messager.progress({
	        title: '提示',
	        msg: '请稍候……',
	        text: '债券信息下载中……'
	    });
		if("EXCEL" === name){
			var url="";
			window.location.href=url; 
		}else if("TXT" === name){
			var url="";
			window.location.href=url; 
		} 
		listenEnd();
	}
function listenEnd() {//定时监听       
        var loop = setInterval(function() {
            if ($("#divloads").val() == "1") {
                clearInterval(loop);//停止定时任务
                $.messager.progress('close');//进度条关闭
            } else {
            	getendflag();
            }
        }, 1000);//单位毫秒  注意:如果导出页面很慢时,建议循环时间段稍长一点
    }

function getendflag() {//请求session标记位    
	 $.ajax({
		url: "",
		type : 'POST',
		dataType : 'json',
		data : { "content" : '123' },
		success : function(data) {
			if("1"==data.obj.flag){
						$("#divloads").val("1")
			}
		},
		error: function (XMLHttpRequest, textStatus, errorThrown) { // 设置表单提交出错
			alert("操作失败,请联系系统管理员或稍后再试!" + XMLHttpRequest.status 
					+ " " + XMLHttpRequest.readyState + " " + textStatus + " "
					+ errorThrown);
		},
	});
 }

//导出逻辑时将标识放入session中
request.getSession().removeAttribute("endflag");
request.getSession().setAttribute("endflag", "1");

//获取结束标记
@RequestMapping("/getEndFlag")
@ResponseBody
public JSONObject getendflag(HttpServletRequest request, HttpServletResponse response) {
    	JsonResult result = new JsonResult(Response.SUCCESS);
	    JSONObject obj = new JSONObject();
        Object flag = request.getSession().getAttribute("endflag"); //获取结束标记*/
        obj.put("flag", flag);//返回状态值
        result.putObject(obj);
        return result.getResult();
    }
	

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值