티스토리 뷰
시스템이 갑자기 죽어서 로그를 보니 ...
다운로드를 클릭했는데 아무런 화면의 변화가 없으니 연달아 5번을 클릭했네요.
하필 그때 또 메모리를 엄청 잡아 먹는 요청이 날아 갔고...
일단 이중 요청을 막고 요청시 spinner를 보여 주기로 했습니다.
단순히 이중 요청 막는 것은 간단한 플래그하나 심으면 될 듯합니다.
1 2 3 4 5 6 7 8 9 10 | var isProcess = false; function doSomething(){ if(isProcess){ alert(처리 중입니다. 나중에 다시 하세요"); return; } isProcess = true; ... ... } | cs |
그런데 ...
요청의 결과를 알 수가 없습니다. location.href 라니 ...
1 2 3 | function download(){ location.href="#######"; } | cs |
요청된 페이지에서 완료 시 쿠키를 생성하고
요청한 페이지에서 1초 간격으로 최대 100초 동안 쿠키를 확인해서 그에 따른 처리를 하도록 했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | var isProcess = false; var checkCount = 0; function doSomething(){ if(isProcess){ alert("처리 중입니다. 나중에 다시 하세요"); return; } // 프로세스 이중 요청 차단 isProcess = true; // 초기화 checkCount = 0; setCookie("status", "", 0); // 상태 확인 메소드 처리 setTimeout(check, 1000); // 요청 처리 location.href="/test/test"; } function check(){ var _this = this; var status = getCookie("status"); console.log("status : "+status); if(status == "done" || checkCount > 100){ isProcess = false; checkCount = 0; }else{ checkCount ++; setTimeout(check, 1000); } } // 아래는 참고용 function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); var expires = "expires=" + d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } | cs |
서버쪽 처리
1 2 3 4 | Cookie checkDownloadCookie = new Cookie("status", "done"); checkDownloadCookie.setMaxAge(1000000); checkDownloadCookie.setPath("/"); response.addCookie(checkDownloadCookie); | cs |
잘 작동합니다.
끝 ~~~
'Working log' 카테고리의 다른 글
20190328001 - IE 8 지원 관련 개발 (0) | 2019.03.28 |
---|---|
20190326001 - RestTemplate handshake_failure 처리 (0) | 2019.03.26 |
20190321002 - 엑셀 파일 다운로드 처리 (0) | 2019.03.21 |
20190321001-Spring boot Redirect 처리 (0) | 2019.03.21 |
2019031801-Spring boot에서 Gradle 5.x 빌드 시 Lombok 관련 컴파일 오류 처리 (2) | 2019.03.18 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 샘플
- oracle
- sample
- example
- 예제
- java
- lombok
- 타임리프
- 엑셀
- springboot
- REST
- mapToList
- 메시지
- Javascript
- mybatis
- thymeleaf
- RESTful
- SHEETJS
- restful서비스
- cache
- 스프링
- 스프링부트
- ag grid
- Spring Boot
- UI
- 그리드
- AG-GRID
- spring
- listToMap
- 설정
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함