2016-11-10 8 views
-1

В файле JSP, у меня есть простой вид:Прослушивание отправки формы -> скачать файл событий

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

и на основе нескольких select параметров, она возвращает файл .zip через этот кусок кода сервлет:

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

-followed некоторых sos.write(byteArray);

Все это работает отлично, но время, которое требуется, чтобы создать файл почтового индекса зависит от параметра формы s, и я хотел бы отобразить всплывающее окно «Please Wait» («Подождите») в форме submit, а затем снова будет удалено автоматически, когда браузер получит .zip-файл.

У меня нет проблем с отображением всплывающего окна, но мне нелегко заставить его автоматически исчезать после получения файла! Как это сделать?

Если бы попробовал следующее:

1: Явное $.unblockUI() в

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

бут готовности() событие не запускается после .zip файла, отправленного, т.е. .jsp не перезагружается ,

2: Решение, такое как this one. Вызывается функция обратного вызова успеха, но ZIP-файл не загружается. Я думаю, однако, что .zip-файл переносится в браузер в двоичной форме через объект ответа, переданный функции, вызванной успехом.

3: сканирование веб-страницы jQuery для прослушивания событий, но я обнаружил только при запуске действия ($('#form').submit(...)), а не в ответе.

+0

Почему вы не используете методы jQuery для получения и публикации? Вы можете прослушивать сделанные, неудачные и всегда события. https://api.jquery.com/jquery.get/ Когда вы отправляете запрос, вы показываете свое всплывающее окно и всегда используете метод, вы можете просто удалить его. –

+0

@Botond, это именно то, что я пробовал, см. 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

В следующий раз показать полный код -.- –