abbear25 2017. 6. 27. 00:27

AJAX 비동기 방식의 자바스크립트 XML (Asynchronous Javascript and XML)

백그라운드 동작

화면의 일부분만 변경할 때 사용 (기존의 경우에는 전체화면 새로고침)

표준 HTTP방식(GET/POST)으로 서버와 통신

직관적이고 자연스런 사용자 상호액션 방식(기존 클릭 필요 없음)


관련 필수 메소드

open("HTTP method", "URL", syn/asyn)

요청의 초기화 작업

GET/POST 지정

서버 URL 지정

동기 / 비동기 설정

send(content)

GET 방식은 URL에 필요정보 추가 하기 때문에 null

POST 방식은 파라미터 설정 처리

onreadystatechange

서버에서 응답이 도착했을 때 호출될 콜백함수 지정

콜백함수는 상태가 변경될 때 마다 호출

readyState

요청의 현재 상태

0: uninitialized (객체 생성 후 open메서드 호출전)

1: lading (open 메서드가 호출되고 send호출전)

2: loaded (send 메서드가 호출되었지만 서버응답 전)

3: interactive (데이터의 일부가 전송된 상태)

4: completed (모든 데이터 전송 완료)

status

서버 처리 결과 상태코드

200: 요청성공 / 404: not found / 500: server error

responseText

서버의 응답결과를 문자열로 받기

responseXML

서버의 응답결과를 XML Document로 받기


프로그래밍 순서

1. 클라이언트 이벤트 발생

2. XMLHttpRequest 객체 생성

function getXMLHttpRequest(){
	if(window.ActiveXObject)
		return new ActiveXObject("Microsoft.XMLHTTP");
	if(window.XMLHttpRequest)
		return new XMLHttpRequest();	
		return null;
}
var httpRequest = getXMLHttpRequest();


3. XMLHttpRequest 객체 콜백함수 설정

4. XMLHttpRequest 객체를 통한 비동기화 요청

function sendProcess(){
		httpRequest = getXMLHttpRequest();
		httpRequest.onreadystatechange = callbackFunction;
		httpRequest.open("GET", "/ELTest/ajax/exam01/hello.jsp", true);
		httpRequest.send(null);
	}
	
	function callbackFunction(){
		var debug = document.getElementById("debug");
		/*0. open() 호출전 1.open()호출, send()호출전 2.send()호출, 서버응답전
		3.서버응답, header전송, body미전송 4.body전송완료(응답완료)*/
		switch(httpRequest.readyState){
		case 1:
			debug.value += "Loading...\n"
			break;
		case 2:
			debug.value += "loaded...\n"
			break;
		case 3:
			debug.value += "Interactive...\n"
			break;
		case 4:
			debug.value += "Complete...\n"
			if(httpRequest.status==200)
				debug.value+="웹서버에서 정상적으로 수행...\n";
			else{
				debug.value+="웹서버에서 오류발생...\n";
				debug.value+="오류코드: "+httpRequest.status+"\n";
				debug.value+="오류내용: "+httpRequest.statusText
				+"\n";
				
			}
			break;
		}
	}


5. 서버 응답결과를 생성하여 클라이언트로 전송

function sendRequest(method, url, param, callback){
		httpRequest.onreadystatechange = callback;
		httpRequest.open(method, url, true);
		httpRequest.send(param);
	}
	
	function requestMsg(){
		httpRequest = getXMLHttpRequest();
		sendRequest("GET", "hello.jsp", null, responseMsg)
	}


6. XMLHttpRequest 객체는 서버 결과를 처리할 콜백함수 호출

7. 결과를 클라이언트 화면에 반영

반응형