问题描述:
在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>
新的解决办法
其实问题的根本原因在于:IE是根据请求的url是不是一样来是否发送请求,对于同一请求,IE只发送一次http请求,所以同一请求发送多次,但IE实际是不会发送的。 所以我们只需要在ajax的url之后加上一个随机数或当前时间即可。
全选
示例 :
var urls = '<c:url value="/store/plan/exportPlans"/>'+"?fresh="+Math.random();