在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文件所需的时间取决于表单参数,我想在表单提交时显示"请等待"blockUI弹出,然后当浏览器接收到。zip文件时,它会再次自动删除。
我没有麻烦显示弹出,但我有一个困难的时间让它再次自动消失后,文件收到!我该如何做到这一点?
如果尝试了以下操作:
1: Explicit $.unblockUI()
in
jQuery(document).ready(function($) { ... }
-但是ready()事件在.zip文件发送后没有触发,也就是说,.jsp没有重新加载。
2:像这样的解决方案。调用成功回调函数,但没有下载.zip文件。但是,我认为.zip文件是以二进制形式通过传递给成功调用的函数的响应对象传输到浏览器的。
3:扫描jQuery网页上的事件收听,但我只发现了触发的动作($('#form').submit(...)
),而不是其响应
哦,我找到了!
我在$.post
中将return false
更改为return true
,现在它可以工作了!
var $form = $('#extract_form');
$form.submit(function(){
$.post($(this).attr('action'), $(this).serialize(), function(response) {
$.unblockUI();
}, 'text');
return true;
});