项目中需要实现导出Excel的功能,Excel不是保存在服务器上的文件,而是动态生成的。由于查询条件和数据大小的影响,生成Excel的时间不固定(大约5~10秒左右),因此需要做下载等待效果,防止用户多次点击下载。实现下载等待效果的关键是获取到后台导出Excel完成的时间或者捕获到Excel开始下载的事件。可以从两个方面入手,一个是在浏览器端触发onload事件。一个是在服务器端完成Excel导出,然后把Excel保存到服务器的临时位置,然后通知客户端去下载。
iframe实现下载等待
用iframe实现下载等待的原理是把下载的路径给iframe的src,然后监听iframe的onload事件,当后台处理完成并返回文件时,会触发iframe的onload事件。使用该方法有两个问题:
参数通过url传递,如果url长度超过2048会被浏览器截断。
iframe的onload事件在ie浏览器下触发不符合要求。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="http://cdn.bootcss.com