IE下Excel二次导出兼容性调整


问题描述:

在IE下点击Excel导出,第一次正常,第二次异常。js代码如下:

全选 示例 :
//导出excel
	function exportExcel(){
		showLoad();
		var urls = '<c:url value="/store/plan/exportPlans"/>';
		$.ajax({
		        url: urls,
 			async:false,
			data:{
				query:query,
				enterpriseEnglishName:enterpriseEnglishName,
				createTime:createTime
			},
			success: function(data){
		                hiddenLoad();
			        window.location.href=
                                      "<c:url value="/store/plan/download"/>;
                                $.messager.alert('提示消息','报表生成完成!');
			}
		});
	}

原因在于:

第一次导出时,通过"/store/plan/exportPlans"路径下的方法准备Excel数据,再通过"/store/plan/download"路径下的方法下载,等下载完之后,删除文件;在IE下若第二次导出时没有及时清除缓存,浏览器会直接通过window.location.href=""所指路径下载,由于文件已经删除,故系统异常。

解决办法:

1.将window.location.href=""改成表单提交的方式,如:

全选 示例 :
//导出excel
	function exportExcel(){
		showLoad();
		var urls = '<c:url value="/store/plan/exportPlans"/>';
		$.ajax({
		        url: urls,
 			async:false,
			data:{
				query:query,
				enterpriseEnglishName:enterpriseEnglishName,
				createTime:createTime
			},
			success: function(data){
		                hiddenLoad();
			        $.messager.alert('提示消息','报表生成完成!');
				$('#download').submit();
			}
		});
	} 
       
       <form id="download"
		action="<c:url value="/store/plan/download"/>" method="post">       
       </form>

2.设置自动清除缓存,步骤如图:

新的解决办法

其实问题的根本原因在于:IE是根据请求的url是不是一样来是否发送请求,对于同一请求,IE只发送一次http请求,所以同一请求发送多次,但IE实际是不会发送的。 所以我们只需要在ajax的url之后加上一个随机数或当前时间即可。

全选 示例 :
var urls = '<c:url value="/store/plan/exportPlans"/>'+"?fresh="+Math.random();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值