반응형
* 개요: 서버단은 View를 반환하고 반환하는 View는 AbstractXlsxView를 상속받은 클래스의 객체를 반환하도록 되어 있는 엑셀저장이 form.submit이나 window.location.href로 잘 동작하는데 로딩바를 추가할 필요가 있어서 ajax 호출로 변경하는 경우 참고하면 된다.
$.ajax({
type: "GET",
url: "your URL",
data: "your param",
contentType: "application/json",
xhrFields: {
responseType: "blob"
},
// xhrFields 필드는 ajax 공식 문서에 보면 나온다.
// https://api.jquery.com/jQuery.ajax/
// blob은 Binary Large Object 그림, 오디오, 멀티미디어 오브젝트를 뜻한다.
success: function (data, status, xhr) {
if (xhr.status == 200) {
let blob = new Blob([data], { type: 'application/vnd.ms-excel' });
let link = document.createElement("a");
link.href = window.URL.createObjectURL(blob);
let disposition = xhr.getResponseHeader("Content-Disposition");
// 서버단에서 response header에서 filename을 넘겨주면 클라이언트에서 응답받아 사용한다.
let filename = decodeURI(disposition.substring(23, disposition.indexOf('";charset="UTF-8"')));
// 자르고 버무려서 파일명을 만든다.
link.click();
window.URL.revokeObjectURL(link.href);
// mdn web docs를 보면 "URL.revokeObjectURL() 정적 메서드는 이전에 URL.createObjectURL()을 통해
// 생성한 객체 URL을 해제합니다" 라고 설명되어 있다.
}
// 본인 환경에 맞게 처리
},
error: function (err) {
// 본인 환경에 맞게 처리
}
* 주저리: 스프링 공식 문서를 아무리 찾아봐도 AbstractXlsxView 공식 예제를 찾을 수가 없다. 시간이 너무 지나서인가.... ajax 공식 doc은 왜이렇게 뭐가 없는지.... 믿을건 쳇gpt뿐이다... 쳇gpt가 출현하니 샘플 코드를 너무 잘 보여줘서 이런 블로그를 운영할 필요가 있는지 회의감이 들기도 한다..........
반응형
'jQuery' 카테고리의 다른 글
[Ajax] 정상적인 상황에서 200 에러가 나는 경우 (2) | 2018.06.15 |
---|---|
동일한 name으로 이루어진 select box의 text 값 구하기 (0) | 2018.03.13 |
팝업창에서 스크롤을 내렸을 때 input 박스 수정 알리기 기능 (0) | 2018.01.19 |
a 태그를 클릭 했을 경우 부모의 id값 가져오기 (0) | 2017.03.08 |
checkbox 배열 값 가져오기 (0) | 2017.01.18 |