본문 바로가기

📚Study Note/Ajax

[ AJAX ] XMLHttpRequest 객체 생성, onreadystatechange

<Content 바꾸기> 버튼을 클릭하면 서버에 있는 내용("ajaxTarget.txt)이 불러와지도록

 

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>AjaxText01</title>
<script type="text/javascript">
/* 	 function loadXMLDocs()
	 {
		 var xmlHttp;
		
		 if (window.XMLHttpRequest)
		 {
		 xmlHttp = new XMLHttpRequest();
		 }
		 else
		 {
		 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		
		 }
		
		 xmlHttp.onreadystatechange = function()
		 {
		
			 if (xmlHttp.readyState==4 && xmlHttp.status==200 )
			 {
			 	document.getElementById("myDiv").innerHTML = xmlHttp.responseText;
			 }
		
		
		 }
		
		 xmlHttp.open("GET","ajaxTarget.txt", true);
		
		 xmlHttp.send("");
	
	
	 } */ 


		function loadXMLDocs()
		{
			
			// XMLHttpRequest 객체를 담을 수 있는 변수 선언 → AJAX 객체
			var xmlHttp;
			
			// 브라우저에 따라서 객체를 만드는 방법이 다르다. 
			// (클라이언트) 브라우저에 따른 분기이다. (클라이언트 측에서) 자신의 브라우저가 xml http request 를 
			// 지원하고 있는 상황이라면 new XMLHttpRequest 로 하고
			
			// 그렇지 않다면 new ActiveXObject("Microsoft.XMLHTTP"); 로 객체생성한다.
			if (window.XMLHttpRequest) // XMLHHttpRequest 를 지원하니?					
			{
				xmlHttp = new XMLHttpRequest();
			} else
			{
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			// (객체를 생성하는 방법의 차이만 있을 뿐이지 여기까지 수행하면 XMLHttpRequest 객체 생성이 완료된다!)
			
			// 『xmlHttp』 : XMLHttpRequest 객체이다.
			// 서버로부터 응답이 오면 『readystatechange』이벤트가 발생하게 된다.
			
			// xmlHttp 객체에 readystatechange 이벤트가 발생하면! > 이벤트 핸들러
			// 응답이 오길 기다리는 것이 아니라 응답이 올 때마다 함수를 실행하도록 한다
			xmlHttp.onreadystatechange = function()
			{				
				/// 응답이 올 때 마다
				// readyState 가 그 상황에서의 XMLHttpRequest 상태를 저장하게 된다.
				// 즉, readyState 는 XMLHttpRequest 객체의 property 이다.
				// ==>> readystatechange 이벤트는
				// 		readyState 가 변경될 때마다 발생한다.
				
				// ※ 『XMLHttpRequest』의 readyState 는 0 에서 4까지 순차적으로 바뀌게 되는데
				// 0 → 요청이 초기화되지 않은 상태
				// 1 → 서버 연결이 이루어지지 않음
				// 2 → 요청이 수신된 상태
				// 3 → 요청을 처리중인 상태
				// 4 → 요청의 처리가 종료되고, 응답이 준비됨.
				
				
				// ※『XMLHttpRequest』의 『status』는 HTTP Status 코드를 의미한다.
				// 200 → 올바른 응답
				// 40x → 클라이언트 측 에러 (대표:404 페이지 찾을 수 없음)
				// 50x → 서버측 에러 (500에러 → 자바에러)			
				
				// 요청이 처리되고 응답이 준비되었다 그런데 페이지를 찾을 수 없는데!(400에러)도 응답에 포함된다. 
				// 서버로부터 응답을 받았고, 그 응답이 올바른 응답이라면...				
				if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
				{
					
					// 이 구문을 통해 서버로부터 응답을 가져와
					// DOM을 업데이트 하겠다는 의미
					// 응답의 속성에는 두 가지가 있는데
					// responseText 는 텍스트 형식의 응답일 경우 사용하게 되고.
					// responseXML 은 응답이 XML 형식일 경우 사용하게 된다.				
					document.getElementById("myDiv").innerHTML = xmlHttp.responseText;
				}
			}
			// XMLHttpRequest 의 open() 메소드 : open("페이지요청방식", "URL", async) 는
			// XMLHttpRequest 객체를 필요한 값으로 초기화하는데 사용하는 메소드이다.
			// get 방식이 아닌 post 방식으로 요청하기 위해서는
			// xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			// xmlHttp.send(input1=value1&input2=value2);
			// 와 같이 헤더를 추가해주어야 한다. 
			
			//(헤더에 ajax 영역이 없다. 굳이 만들어주지 않는다면 쓸 수가 없다?....?)		
			
			xmlHttp.open("GET", "ajaxTarget.txt", true);
			xmlHttp.send("");
		
		}  
</script>
</head>
<body>

	<div id="myDiv">
		<h1>AJAX를 활용하여 이 텍스트를 바꾸어 보자</h1>
	</div>

	<button type="button" onclick="loadXMLDocs()">Content 바꾸기</button>

</body>
</html>