본문 바로가기
💻 1. 웹개발_Front end/1-7 Ajax

[Ajax] 18. 기타 메소드

by 달님🌙 2021. 10. 6.
반응형

 

 

1. 기타 메소드 종류

- ajaxSetup() : Ajax요청 시에 전달되는 속성 값과 콜백 함수의 기본 값을 설정 및 변경하는 메소드

                  모든 Ajax요청에 적용되기 때문에 빈번하게 사용하는 것은 권장되지 않음

- ajaxPrefilter() : 사용자 정의 Ajax 설정을 추가하거나 기존 Ajax 설정의 기능을 변경할 때 사용하는 메소드

 

 

2. 실습 - Ajax_Setup

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="js/jquery-3.6.0.min.js"></script>
<title>Ajax 사용 - GET방식</title>
</head>
<body>
	<button type="button" onclick="reqList();">조회</button>
	<button type="button" onclick="delList();">삭제</button>
	<p id="resp"></p>
	<script>
		//Ajax 전역 이벤트 함수 등록
		$(document).ready(function() {
			$(document).ajaxStop(function() {
				console.log("ajaxStop");
			});
			
			//모든 Ajax에 대한 timeout이 1900으로 설정됨
			//모든 Ajax에 대한 전역 이벤트 함수 호출을 하지 않음
			$.ajaxSetup({
				timeout : 1900,
				global : false, //전역이벤트 함수 발생 옵션(true : 발생, false : 발생하지 않음)
				error : function(jqXHR, status, error) {
					console.log(error);
				}
			});
		});
	
		function reqList() {
			$.get("/contact/list_long.do", function(data) {
				console.log(data);
			});
			
			$.get("/contact/list_long.do", function(data) {
				console.log(data);
			});
			
			$.get("/contact/list.do", function(data) {
				console.log(data);
			});
		}
		
		function delList() {
			//p요소 초기화
			$("#resp").html("");
		}
	</script>
</body>
</html>

 

* favicon 에러는 favicon을 지정해주지 않아서 생긴 오류이므로 그냥 무시할 것. 

 

 

3. 실습 - Ajax_PreFilter

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="js/jquery-3.6.0.min.js"></script>
<title>Ajax 사용 - GET방식</title>
</head>
<body>
	<button type="button" onclick="reqList();">조회</button>
	<button type="button" onclick="delList();">삭제</button>
	<p id="resp"></p>
	<script>
	/*
	비동기 전송이기 때문에 버튼을 여러 번 누르면 Ajax요청이 여러 번 발생
	전송중일 때는 버튼을 눌러도 재요청이 안되도록 설정
	*/
		$(document).ready(function() {
			//현재 전송중인지 아닌지를 체크하기 위한 객체 선언
			var currentRequest = {};
			
			$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
				//ajax요청에서 abortOnRetry 속성을 불러옴
				if(options.abortOnRetry) {
					if(currentRequest[options.url]) {
						//현재 ajax 요청 취소
						jqXHR.abort();
						console.log("abort Request");
					} else {
						currentRequest[options.url] = jqXHR;
					}
				}
			});
			
			$(document).ajaxComplete(function(e, jqxhr, options) {
				//ajax 요청 완료 시 currentRequst 객체의 options.url 속성 제거 
				if(options.abortOnRetry) {
					//delete : 객체 속성 제거 연산자
					delete currentRequest[options.url];
				}
			});
		});
	
		var count = 0;
		function reqList() {
			$.get({
				url : "/contact/list_long.do",
				//사용자 정의 속성
				abortOnRetry : function(xhr, settings) {
					count++;
					console.log("send" + count + " Request");
				},
				success : function(data) {
					console.log("success" + count + " Request");
					console.log(data);
				},
				error : function(xhr, status, error) {
					console.log("error" + count + " Request");
				}
			});
		}

		function delList() {
			//p요소 초기화
			$("#resp").html("");
		}
	</script>
</body>
</html>

 

* 조회 버튼을 여러 번 눌렀을 때 abort가 찍힘

 

 

반응형

댓글