在JSP文件中,我有这个简单的形式:
<form action="#" method="post" id="extract_form">
并基于一些select
参数,它通过Servlet中的这段代码返回一个.zip文件:
ServletOutputStream sos = response.getOutputStream();
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=\"" + zipFile.getName() + "\"");
- 跟随一些sos.write(byteArray);
这一切都很好,但创建zip文件所需的时间取决于表单参数,我想显示一个&#34; Please Wait&#34;在表单提交时弹出blockUI,然后在浏览器收到.zip文件时自动再次删除。
我在显示弹出窗口时没有遇到任何问题,但收到文件后我很难再次自动消失!我该如何做到这一点?
如果尝试过以下操作:
1:
中的显式$.unblockUI()
jQuery(document).ready(function($) { ... }
- 但是.zip文件发送后没有触发ready()事件,即没有重新加载.jsp。
2:类似this one的解决方案。调用成功回调函数,但不下载.zip文件。不过,我认为.zip文件通过传递给成功调用函数的响应对象以二进制形式传输到浏览器。
3:扫描jQuery网页以查看要收听的事件,但我只发现了触发动作($('#form').submit(...)
),而不是其响应。
答案 0 :(得分:0)
哦,尤里卡!
我在return false
中将return true
更改为$.post
,现在可以了!
var $form = $('#extract_form');
$form.submit(function(){
$.post($(this).attr('action'), $(this).serialize(), function(response) {
$.unblockUI();
}, 'text');
return true;
});