利用Ajax向Servlet发送请求下载统计后的Excel文件,利用jquery.blockUI.js给予用户等待提示

1 篇文章 0 订阅
1 篇文章 0 订阅

在统计业务需求中,需要去实时的统计并下载Excel文件。当数据量特别大的时候,就需要给予用户提示。点击下载时界面禁止用户操作,当弹出下载窗口时允许操作。

由于后台业务逻辑,在获取数据和统计数据的过程中 耗时比较长,所以在excel文件导出的过程中加了一个 提示用户正在导出数据的等待页面 ,现在用的是jquery的插件jquery.blockUI.js 。

这个插件的主要用法就是在发送异步请求之前先 调用一下锁屏的方法:
$.blockUI({ message: '<img src="././images/WaitProcess.gif" /> 数据导出中...' });,使用户不能进行其他操作,同时还能提示用户正在导出数据;  在success回调方法中解锁: $.unblockUI(); 
原本现在文件直接通过超链接可以完成下载,但现在要在success回调方法中解锁: $.unblockUI(); 在url中附带几个参数,并且这些参数要是点击事件触发时的最新值,所以这里使用ajax的方式进行下载。

 

然而:

1.使用ajax,ajax的返回值类型是json,text,html,xml类型,或者可以说ajax的发送,接受都只能是string字符串,不能流类型,所以无法实现文件下载,强用会出现response冲突。

如果非要使用ajax的话,只能通过返回值得到生成的文件相关url。然后在回调函数里通过创建一个iframe,并设置其src值为文件url,或者一个对文件生成流的处理url,这样操作来实现文件下载且页面无刷新。

<input type="button" value="打印" name="print" onclick="download();" />

 

<script type="text/javascript" src="${ctx }/js/jquery.js"></script>
<script type="text/javascript" src="${ctx }/js/jquery.blockUI.js"></script>
<script type="text/javascript">
function download(){
	 $.blockUI({message: '<img alt="" src="${ctx }/pkg/loading.gif"> 数据导出中...' });
	 /* 在success回调方法中解锁: $.unblockUI();   */
	 var parameter1 = $("#parameter1").val();
	 var parameter2 = $("#parameter2").val();
	 var parameter3 = $("#parameter3").val();
	 $.ajax({
         url: "${ctx }/Stat",
         type: "POST",
         cache: false,
         dataType : 'text',  
         data:{parameter1:parameter1,parameter2:parameter2,parameter3:parameter3},
         success: function(data) {
	    $.unblockUI();
	    var result = eval("(" + data + ")");
            $(document.body).append("<iframe height='0' width='0' frameborder='0'  src=" + result.path + "></iframe>")
         },
         error:function(a,b,c){
         	alert("error");
         }
     });
 }
</script>

以下是servlet:

String parameter1= request.getParameter("parameter1")
int parameter2 = request.getParameter("parameter2");
int parameter3 = request.getParameter("parameter3");
try {
    String path = StatPrinter.exportToExcel(...);//返回的是文件地址
    PrintWriter out = response.getWriter();
    out.print("{\"path\":\""+request.getContextPath() + "/file/down?file=" + path.replace("\\", "/")+"\"}");
    out.close();
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值