2016-11-10 35 views
-1

在JSP文件中,我有這樣的簡單形式:監聽表單提交 - >文件下載事件

<form action="#" method="post" id="extract_form"> 

,並基於幾個select參數,它通過這段代碼中返回一個.zip文件在Servlet:

ServletOutputStream sos = response.getOutputStream(); 
response.setContentType("application/zip"); 
response.setHeader("Content-Disposition", "attachment; filename=\"" + zipFile.getName() + "\""); 

一些sos.write(byteArray);

所有這一切工作優秀-followed,但需要創建zip文件的時間取決於形式PARAM我想在表單提交中顯示一個「Please Wait」blockUI彈出窗口,然後當瀏覽器接收到.zip文件時,它會自動再次被刪除。

我沒有麻煩顯示彈出窗口,但我很難讓它在收到文件後自動消失!我該如何做到這一點?

如果已經嘗試了以下內容:

1:明確$.unblockUI()

jQuery(document).ready(function($) { ... } 

- 但是就緒()事件發送.zip文件後不會被觸發,即.JSP不重裝。

2:類似this one的解決方案。成功回調函數被調用,但不會下載.zip文件。但我認爲,.zip文件是通過傳遞給函數success上的函數的響應對象以二進制形式傳遞給瀏覽器的。

3:掃描jQuery網頁中要收聽的事件,但我只發現觸發動作($('#form').submit(...)),而不是響應。

+0

爲什麼不使用jQuery get和post方法? 你可以聽完成,失敗和總是事件。 https://api.jquery.com/jquery.get/ 當您發送請求時,顯示彈出窗口,以及總是方法,您可以直接將其刪除。 –

+0

@Bondond,這正是我所嘗試的,見2),但響應被成功函數調用「捕獲」並且不傳播到瀏覽器(我猜)。 –

回答

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; 
}); 
+0

下一次顯示完整的代碼-.- –