반응형
05-14 05:47
Today
Total
«   2024/05   »
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
관리 메뉴

개발하는 고라니

[Javascript] Ajax 모듈 본문

Languages/JS

[Javascript] Ajax 모듈

조용한고라니 2021. 5. 6. 23:57
반응형

팀 프로젝트를 진행하다가 JQuery를 안쓰고 Ajax를 사용하려니 코드량도 길고 반복되는 코드가 많아져서 조잡하지만 간단하게 ajax를 사용할 수 있는 모듈을 만들어보았다. 실용성은 그다지 모르겠으나.. 나의 의도대로 잘 동작하긴 한다. 이는 요긴하게 쓰일 수 있는 모듈이므로 차차 업데이트를 진행할 예정이다.

function ajax(obj){
	
	const xhr = new XMLHttpRequest();
	
	var method = obj.method || 'GET';
	var url = obj.url || '';
	var data = obj.data || null;
	
	
	if(obj.contentType)
		xhr.setRequestHeader('Content-Type', obj.contentType);	
	
	/* 성공/에러/중단 */
	xhr.addEventListener('load', function() {
		
		const data = xhr.responseText;
		
		if(obj.load)
			obj.load(data);
	});
	
	/* 성공 */
	xhr.addEventListener('loadend', function() {
		
		const data = xhr.responseText;
		
		//console.log(data);
		
		obj.loadend(data);
	});
	
	/* 실패 */
	xhr.addEventListener('error', function() {
		
		console.log('Ajax 중 에러 발생 : ' + xhr.status + ' / ' + xhr.statusText);
		
		if(obj.error){
			obj.error(xhr, xhr.status, xhr.statusText);
		}
	});
	
	/* 중단 */
	xhr.addEventListener('abort', function() {
		
		if(obj.abort){
			obj.abort();
		}
	});
	
	/* 진행 */
	xhr.addEventListener('progress', function() {
		
		if(obj.progress){
			obj.progress();
		}
	});
	
	xhr.open(method, url, true);
	xhr.send(data);
}

다음은 위 모듈의 사용법 예시이다. JQuery의 향수를 느껴 이와 비슷하게 했다.

ajax({
	method: 'GET',
	url: '/replies/10/1',
	contentType: 'application/json',
	data: JSON.Stringify({data: 'data', id: 10}),
	loadend: (result) => {
		console.log(data);
	},
	load: () => {
		console.log('load !!');
	},
	error: (xhr, status, statusText) => {
		console.log(status);
		console.log(statusText);
	},
	progress: () => {
		console.log('progress');
	}
});

이 모듈을 만들며 자바스크립트의 함수에 대해 깊이 있는 공부를 하게 되어 기쁘다.

반응형

'Languages > JS' 카테고리의 다른 글

[Javascript] Collections  (0) 2021.06.17
[Javascript] Image 미리보기  (0) 2021.05.27
[Javascript] Ajax  (0) 2021.04.29
[Javascript] Drag & Drop 파일 업로드  (0) 2021.04.27
[Javascript] 이벤트 기반의 윈도우 프로그래밍  (0) 2021.04.14
Comments