본문 바로가기

웹 프로그래밍/JavaScript

[AJAX] XMLHttpRequest 모듈을 이용한 예제

module.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="httpRequest.js"></script>
<script>
	function sendOnClick() {
		/* sendProcess('GET', 'sample.jsp', 'name=hong&age=20', callback); */

		// 파라미터를 JSON 형태로 넘길 수 있다. 그러나 httpRequest.js에 별도 로직을 추가해야 함.
		/* let params = {name : 'hong', age : 22};
		sendProcess('POST', 'sample.jsp', params, callback);  */
		
		let f = document.inputForm;
		let n = f.name.value;
		let a = f.age.value; 
		let ad = f.addr.value;
		
		// JSON : JavaScript Object Notation 
		let params = {name : n, age : a, addr : ad};
		sendProcess('POST', 'sample.jsp', params, callback);  
	}
	
	function callback() {
		let msg = '';
		switch(httpRequest.readyState) {
		case 1 : 
			msg += 'Loading...\n';
			break;
		case 2 : 
			msg += 'Loaded...\n';
			break;
		case 3 :
			msg += 'Interactive...\n';
			break;
		case 4 :
			msg += 'Complete...\n';
			// 서버 응답 후 상태코드 확인
			if(httpRequest.status == 200) {
				msg += '웹서버에서 정상적으로 수행완료...\n';
				msg += '실행결과 : ' + httpRequest.responseText + '\n';
			} else {
				msg += '웹서버에서 오류 발생...\n';
				msg += '오류코드 : ' + httpRequest.status + '\n';
				msg += '오류내용 : ' + httpRequest.statusText + '\n';
			}
			break;
		}	
		debugTrace(msg);
	}
	
	function debugTrace(msg) {
		let debug = document.getElementById("debug");
		debug.value += msg;
	}
</script>
</head>
<body>
	<h2>XMLHttpRequest 모듈을 이용한 예제</h2>
	<br>
	<form name="inputForm">
		<textarea rows="10" cols="80" id="debug"></textarea><br>
		이름 : <input type="text" name="name"><br>
		나이 : <input type="text" name="age"><br>
		주소 : <input type="text" name="addr"><br>
		<input type="button" value="서버에 자료전송" onclick="sendOnClick()" >
	</form>
</body>
</html>

httpRequest.js

/**
 * Ajax와 관련된 함수 집합
 */

let httpRequest = null;

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

function sendProcess(method, url, params, callback) {
	// 1. request 객체 생성
	httpRequest = getXMLHttpRequest();
	
	// 2. callback 함수 정의
	httpRequest.onreadystatechange = callback;
	
	// method 초기값 설정
	let httpMethod = method.toUpperCase();
	if(httpMethod != 'GET' && httpMethod != 'POST')
		httpMethod = 'GET';

	// parameter 설정 : json 형태로 넘어 올 수 있으니, httpParams 라는 변수를 별도로 만든다.
	httpParams = params;
	if(params == null || params == '')
		httpParams = '';
	
	if(typeof(httpParams) == 'object'){
		// json 형태로 들어올 경우, 파라미터를 초기화하고, name=value 형태로 변환한다.
		// json to 'name=value&name=value'
		httpParams = '';
		for(let key in params){
			if(httpParams != '')
				httpParams += '&'
			httpParams += key + "=" + encodeURIComponent(params[key]);
			console.log(httpParams);
			
		}
		
		
	}
	
	
	// 3. 메소드에 맞게 초기화하여 전송
	httpUrl = url;
	if(httpMethod == 'GET' && httpParams != ''){
		httpUrl = url + '?' + httpParams;
	} 
	
	httpRequest.open(httpMethod, httpUrl, true);
	if(httpMethod == 'POST'){
		httpRequest.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
	}
	
	// 3항 연산자 활용하여 전송
	httpRequest.send(httpMethod == 'GET' ? null : httpParams);
	
	
	
}


 

sample.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	if(request.getMethod().equals("POST"))
		request.setCharacterEncoding("utf-8");
%>

안녕하세요 ${ param.name } 회원님
회원님이 입력하신 내용은
이름 : ${ param.name }
나이 : ${ param.age }
주소 : ${ param.addr }
입니다.