2016-11-10 5 views
-1

, 나는이 간단한 양식이 : 몇 select 매개 변수를 기반으로제출 -> JSP 파일에서 파일 다운로드 이벤트

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

과, 그것은 코드의 조각을 통해 .zip 파일을 반환 서블릿 :

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

모든이 우수한 작동하고 일부 sos.write(byteArray);

에 의해 -followed하지만 zip 파일을 생성하는 데 걸리는 시간은 양식 PARAM에 따라 달라집니다 eters와 form submit에 "Please Wait"blockUI 팝업을 표시하고 싶습니다. 그러면 브라우저가 .zip 파일을 받았을 때 자동으로 제거됩니다.

나는 팝업을 표시하는 데 문제가 없지만 파일을받은 후 자동으로 다시 사라지도록 힘듭니다! 어떻게해야합니까?

시도하면 다음

1 : 명시 $.unblockUI() 전송 .zip 파일 후 트리거되지 않습니다 준비() 이벤트 -하지만

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

에, 즉, .jsp를 다시로드되지 않습니다 .

2 : this one과 같은 용액. 성공 콜백 함수가 호출되었지만 .zip 파일은 다운로드되지 않았습니다. 그래도 .zip 파일은 성공시 호출 된 함수에 전달 된 응답 객체를 통해 이진 형식의 브라우저로 전송됩니다.

3 : 듣기 위해 이벤트에 대한 jQuery 웹 페이지를 검색했지만 응답 ($('#form').submit(...))이 아닌 응답 만 발견했습니다.

+0

jQuery get 및 post 메서드를 사용하지 않는 이유는 무엇입니까? 완료, 실패 및 항상 이벤트를들을 수 있습니다. https://api.jquery.com/jquery.get/ 요청을 보내면 팝업이 표시되고 항상 방법으로 간단히 제거 할 수 있습니다. –

+0

@Botond, 정확히 내가 뭘했는지, 2)를 참조하십시오. 그러나 응답은 성공 함수 호출에 의해 "catch"되고 브라우저에 전파되지 않습니다. –

답변

0

오, 유레카!

$.post에서 return falsereturn true으로 변경했습니다.

var $form = $('#extract_form'); 
$form.submit(function(){ 
    $.post($(this).attr('action'), $(this).serialize(), function(response) { 
     $.unblockUI(); 
    }, 'text'); 
    return true; 
}); 
+0

다음 번에 전체 코드보기 - .- –