유쨈미 2024. 5. 29. 22:45

1. JS에서 AJAX 처리 방법

1️⃣ 기본 Ajax 방법 (XMLHttpRequest)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- axios CDN -->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

<script type="text/javascript">
window.onload = () => {
	document.querySelector("#btn1").onclick = funcJs;
}

let xhr;

function funcJs() {
	xhr = new XMLHttpRequest();
	xhr.open('get', "js38.json", true);

	// 통신상태 확인 - 문제가 없으면 process()
	xhr.onreadystatechange = function(){
		if (xhr.readyState  === 4) {
		    if (xhr.status === 200) {
				processFunc();
			} else {
				alert("요청 실패 : " + xhr.status);
			}
		}
	}
	xhr.send(null);
}

function processFunc() {
	let data = xhr.responseText;
	//alert(data);
	let parseData = JSON.parse(data);
	
	let str = "";
	for(let i = 0; i < parseData.sangpum.length; i++) {
		str += parseData.sangpum[i].code + " " + parseData.sangpum[i].sang + "<br>";
	}
	document.querySelector("#show1").innerHTML = str;
}
</script>

</head>
<body>
<h2>* JS에서 AJAX 처리 방법 *</h2>
<button id="btn1">기본적 방법</button>
<br>

<hr>
방법 1 : <br>
<div id="show1"></div>
</body>
</html>

 

2️⃣ Fetch 방법

fetch 함수는 HTTP response 객체를 래핑한 Promise 객체를 반환한다.
따라서 프로미스의 후속 처리 메서드인 then을 사용하여 resolve한 객체를 전달받을 수 있다.
(Catch, Finally도 마찬가지)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- axios CDN -->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

<script type="text/javascript">
window.onload = () => {
	document.querySelector("#btn2").onclick = funcFetch;
}

let xhr;

function funcJs() {
	xhr = new XMLHttpRequest();
	xhr.open('get', "js38.json", true);

	// 통신상태 확인 - 문제가 없으면 process()
	xhr.onreadystatechange = function(){
		if (xhr.readyState  === 4) {
		    if (xhr.status === 200) {
				processFunc();
			} else {
				alert("요청 실패 : " + xhr.status);
			}
		}
	}
	xhr.send(null);
}

function funcFetch() {
	// fetch 함수는 HTTP response 객체를 래핑한 Promise 객체를 반환한다.
	// 따라서 프로미스의 후속 처리 메서드인 then을 사용하여 resolve한 객체를 전달받을 수 있다.
	const url = "js38.json";
	fetch(url, {method:"GET"}).then(response => {  // {method:"GET"} 생략 가능.
		//alert(response.status);
		if(response.status === 200) {
			return response.json();
		}else{
			console.log(`HTTP ERROR! STATUS : ${response.status}`);
		}
	}).then(jsonData => {
		//alert(jsonData);	// JSON.parse()가 된 상태
		let str = "";
		for(let i = 0; i < jsonData.sangpum.length; i++) {
			str += jsonData.sangpum[i].code + " " + jsonData.sangpum[i].sang + "<br>";
		}
		document.querySelector("#show2").innerHTML = str;
	}).catch(error => {
		console.error(error);
	});
}
</script>
</head>
<body>
<h2>* JS에서 AJAX 처리 방법 *</h2>
<button id="btn2">Fetch 방법</button>
<br>

<hr>
방법 2 : <br>
<div id="show2"></div>
</body>
</html>

 

3️⃣ Async/Await 방법

Async/Await는 비동기 코드를 동기 코드처럼 작성할 수 있게 해 준다. Fetch API와 함께 사용하면 좋다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- axios CDN -->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

<script type="text/javascript">
window.onload = () => {
	document.querySelector("#btn3").onclick = funcAsync;
}

let xhr;

function funcJs() {
	xhr = new XMLHttpRequest();
	xhr.open('get', "js38.json", true);

	// 통신상태 확인 - 문제가 없으면 process()
	xhr.onreadystatechange = function(){
		if (xhr.readyState  === 4) {
		    if (xhr.status === 200) {
				processFunc();
			} else {
				alert("요청 실패 : " + xhr.status);
			}
		}
	}
	xhr.send(null);
}

async function funcAsync() {
	const url = "js38.json";
	const response = await fetch(url);
	const jsonData = await response.json(); // promise가 내부적으로 활동
	//alert(jsonData);
	
	let str = "";
	for(let i = 0; i < jsonData.sangpum.length; i++) {
		str += jsonData.sangpum[i].code + " " + jsonData.sangpum[i].sang + "<br>";
	}
	document.querySelector("#show3").innerHTML = str;
}
</script>

</head>
<body>
<h2>* JS에서 AJAX 처리 방법 *</h2>
<button id="btn3">Async 방법</button>
<br>

<hr>
방법 3 : <br>
<div id="show3"></div>
</body>
</html>

 

4️⃣ Axios 방법

Axios는 HTTP 요청을 쉽게 할 수 있게 도와주는 라이브러리이다.
JSON 데이터를 자동으로 변환해 주고, 브라우저와 Node.js에서 모두 사용할 수 있다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- axios CDN -->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

<script type="text/javascript">
window.onload = () => {
	document.querySelector("#btn4").onclick = funcAxios;
}

let xhr;

function funcJs() {
	xhr = new XMLHttpRequest();
	xhr.open('get', "js38.json", true);

	// 통신상태 확인 - 문제가 없으면 process()
	xhr.onreadystatechange = function(){
		if (xhr.readyState  === 4) {
		    if (xhr.status === 200) {
				processFunc();
			} else {
				alert("요청 실패 : " + xhr.status);
			}
		}
	}
	xhr.send(null);
}

function funcAxios() {
	// Axios : Promise 기반의 HTTP 통신 라이브러리이며, 상대적으로 다른 HTTP 통신 라이브러리들에 비해 문서화가 잘되어 있고 API가 다양하다.
	// alert("4");
	const url = "js38.json";
	axios.get(url).then((response) => {
		//alert(response.status);
		return response.data;
	}).then((data) => {
		//alert(data);
		let str = "";
		for(let i = 0; i < data.sangpum.length; i++) {
			str += data.sangpum[i].code + " " + data.sangpum[i].sang + "<br>";
		}
		document.querySelector("#show4").innerHTML = str;
		
	}).catch((error) => {
		console.error('오류 : ', error);
	});
}

</script>

</head>
<body>
<h2>* JS에서 AJAX 처리 방법 *</h2>
<button id="btn4">Axios 방법</button> <!-- axios : 외부 라이브러리. 실무에서 가장 많이 쓰임 -->
<br>

<hr>
방법 4 : <br>
<div id="show4"></div>
</body>
</html>
 

[JavaScript] fetch 함수 쓰는 법, fetch 함수로 HTTP 요청하는 법

fetch 함수는 XMLHttpRequest 객체보다 최근에 나온, HTTP 요청 전송 기능을 제공하는 Web API다. 데이터를 받아오기 위해 습관처럼 쓰던 fetch에 대해 정리해보았다.

velog.io

- 출처 : eunjin

 

시작하기 | Axios Docs

시작하기 브라우저와 node.js에서 사용할 수 있는 Promise 기반 HTTP 클라이언트 라이브러리 Axios란? Axios는 node.js와 브라우저를 위한 Promise 기반 HTTP 클라이언트 입니다. 그것은 동형 입니다(동일한 코

axios-http.com

- 출처 : axios-http.com

 

[JS] Axios 라이브러리를 통한 비동기처리 방식

비동기처리 : 특정 코드의 연산이 끝날 때까지 코드의 실행을 멈추지 않고 다음 코드를 먼저 실행하는 자바스크립트의 처리방식

velog.io

- 출처 : unani92

 

[JavaScript] fetch 함수 쓰는 법, fetch 함수로 HTTP 요청하는 법

fetch 함수는 XMLHttpRequest 객체보다 최근에 나온, HTTP 요청 전송 기능을 제공하는 Web API다. 데이터를 받아오기 위해 습관처럼 쓰던 fetch에 대해 정리해보았다.

velog.io

- 출처 : eunjin


2. Axios

Promise 기반의 HTTP 통신 라이브러리이며, 상대적으로 다른 HTTP 통신 라이브러리들에 비해 문서화가 잘 되어 있고 API가 다양하다. Axios는 브라우저와 Node.js에서 모두 작동하는 약속 기반의 HTTP 클라이언트이다. JSON 데이터를 자동으로 직렬화 및 역직렬화하며, 비동기식으로 HTTP 요청을 쉽게 수행할 수 있게 도와준다. Axios는 네트워크 요청을 간단하게 관리할 수 있게 해주는 다양한 기능을 제공한다.

 

💡 주요 기능

  1. 약속(Promise) 기반
    비동기 코드 작성이 간단해지며, .then() 및 .catch()를 사용하여 요청 결과를 처리할 수 있다.
  2. 요청 및 응답 인터셉터
    요청 또는 응답이 처리되기 전에 가로채서 작업을 수행할 수 있다.
  3. 자동 JSON 데이터 변환
    응답 데이터를 자동으로 JSON으로 변환해 준다.
  4. HTTP 요청 취소
    필요에 따라 요청을 취소할 수 있는 기능을 제공합니다.
  5. 타임아웃 설정
    요청에 대한 타임아웃을 설정할 수 있다.
  6. 동시 요청 처리
    여러 요청을 동시에 처리하고, 모든 요청이 완료될 때까지 기다릴 수 있다.

 

💻 Kakao Open API 활용 예제 코드 (Axios CDN)

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- axios CDN -->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

<script type="text/javascript">
window.onload = () => {
	document.querySelector("#btnAPI1").onclick = funcBook1;
	document.querySelector("#btnAPI2").onclick = funcBook2;
}

let xhr;

function funcJs() {
	xhr = new XMLHttpRequest();
	xhr.open('get', "js38.json", true);

	// 통신상태 확인 - 문제가 없으면 process()
	xhr.onreadystatechange = function(){
		if (xhr.readyState  === 4) {
		    if (xhr.status === 200) {
				processFunc();
			} else {
				alert("요청 실패 : " + xhr.status);
			}
		}
	}
	xhr.send(null);
}

function funcBook1() {
	//alert("7");
	const REST_API_KEY = "cc5cf68ea1e32d33a7edbcfa51e16974";
	const bookName = document.querySelector("#bookSearch").value;
	const query = `?query=${bookName}`;
	//alert(query);
	
	fetch(`https://dapi.kakao.com/v3/search/book${query}`,{
		method: 'get',
		headers:{
			Authorization : `KakaoAK ${REST_API_KEY}`,
		},
	}).then((response) => {
		return response.json();
	}).then((data) => {
		//alert(data.document.length)
		//alert(data.documents[1].title)
		
		let str = "";
		for(let i = 0; i <data.documents.length; i++) {
			str += data.documents[i].authors + ", " +
			data.documents[i].title + ", " +
			data.documents[i].price + ", " +
			data.documents[i].publisher + "<br>";
		}
		document.querySelector("#showBook1").innerHTML = str;
		
	}).catch(err => {
		console.error(err);
	});
}


function funcBook2() {
	//alert("8");
	const REST_API_KEY = "cc5cf68ea1e32d33a7edbcfa51e16974";
	const bookName = document.querySelector("#bookSearch").value;
	
	const options = {
		headers:{
			Authorization : `KakaoAK ${REST_API_KEY}`,
		},
		params:{
			query:bookName,
		},
	}
	
	axios.get(`https://dapi.kakao.com/v3/search/book`, options)
	.then((response) => {
		return response.data;
	}).then((data) => {
		let str = "";
		for(let i = 0; i <data.documents.length; i++) {
			str += data.documents[i].authors + ", " +
			data.documents[i].title + ", " +
			data.documents[i].price + ", " +
			data.documents[i].publisher + "<br>";
		}
		document.querySelector("#showBook2").innerHTML = str;
	});
}

</script>

</head>
<body>
<h2>* JS에서 AJAX 처리 방법 *</h2>
카카오 도서검색 API 사용하기<br>
<input type="text" id="bookSearch" value="자바">
<button id="btnAPI1">도서 검색(Fetch)</button>
<button id="btnAPI2">도서 검색(Axios)</button>
<hr>

<div id="showBook1"></div>
<br>
<div id="showBook2"></div>
</body>
</html>
 

Axios 사용법 | 코드잇

| Axios를 간단히 소개하자면 `fetch()` 함수처럼 리퀘스트를 보내고 리스폰스를 받을 수 있는 라이브러리입니다. `fetch()` 함수랑 사용법은 비슷한데요. 조금 더 편리하게 쓸 수 있는 라이브러리라고

www.codeit.kr

- 출처 : www.codeit.kr


3. jQuery

jQuery는 HTML 문서의 탐색 및 조작을 간편하게 해주는 빠르고 간결한 JavaScript 라이브러리이다.
DOM 요소의 선택, 이벤트 처리, 애니메이션 및 Ajax와 같은 복잡한 작업을 간단한 API로 수행할 수 있게 도와준다.

 

1️⃣ jQuery

  1. DOM 탐색이나 이벤트, 애니메이션, AJAX 등을 활용할 때 유용하게 사용한다.
  2. JS에서 수행하는 것과 동일한 작업을 수행하는 데 사용할 수 있는데
    jQuery를 사용하면 대부분 JS보다 적은 양의 코드로 수행할 수 있다.
  3. CSS의 선택자처럼 선택자를 사용하여 DOM 요소의 검색, 선택 및 조작을 단순화한다.
  4. 크로스 브라우저를 지원한다.
  5. 브라우저별로 처리 방법이 다른 이벤트 처리나 함수들의 문장을 하나의 표현으로 사용 가능하다.

2️⃣ Vanila JS와 jQuery

  1. VanilaJS와 jQuery는 동적인 웹 페이지를 만드는 데 널리 사용되는 웹 기술이다.
  2. Vanila JS는 높은 수준의 프로그래밍 언어이고 jQuery는 JS를 사용하여 수행되는 작업을
    단순화하도록 설계된 오픈 소스 기반의 JS의 라이브러리이다.

 

🚀 window.onload $(document). ready() 차이

 

1️⃣ window.onload 호출 시점
페이지의 모든 요소들이 로드된 이후에 호출

 

💡 window.onload 특징

  1. 페이지의 모든 요소들이 로드되어야 호출된다.
  2. 한 페이지에서 하나의 window.onload() 함수만 적용된다.
  3. 가장 나중에 호출된 함수만 적용

 

2️⃣ $(document).ready() : 호출 시점
DOM이 로드된 시점. 텍스트만 다 넘어오면 자동수행

 

💡 $(document).ready() 특징

  1. 외부 리소스 및 이미지 로딩과 상관없이 DOM만 로드되면 바로 실행된다.
  2. 중복 사용해도 순서대로 모두 실행된다.

 

 

VanilaJS, jQuery, React, Vue 특징

❗ Vanila JS ✨ Vanila JS란? 프레임워크 또는 라이브러리가 적용되지 않은 순수한 자바스크립트를 의미한다. Vanila : 스페인어로 콩을 뜻함 => "핵심, 근본이 되는"이라는 의미를 담고 있음. Vanila JS:

velog.io

- 출처 : eunnbi

 

window.onload 와 $(document).ready()의 차이

1. window.onload 1) 호출 시점 - 페이지의 모든 요소들이 로드된 이후에 호출 2) 특징 - 페이지의 모든 요소들이 로드되어야 호출된다. - 한 페이지에서 하나의 window.onload()함수만 적용된다. - 가장 나

soyeondev.tistory.com

- 출처 : soyeondev

 

[JavaScript] Factory Functions

하우즛 고잉 가이즈? 동기 여러분! 오늘은 Factory Functions, 공장 함수에 대해 알아보겠습니다. 오늘 내용은 쉽고 간단하니까 빠르게 알아보도록 하죠! Factory Functions 리그 오브 레전드의 챔피언들의

dongi-coding.tistory.com

- 출처 : dongi-coding


4. EVENT

jQuery는 웹 페이지의 요소에 대한 이벤트 처리를 매우 간단하게 만들어준다.
이벤트는 사용자의 상호작용에 반응하여 코드가 실행되도록 하는 메커니즘이다.
jQuery에서는 다양한 이벤트를 처리할 수 있으며, 이를 통해 동적인 웹 페이지를 만들 수 있다.

 

 💡주요 이벤트 유형

 

1️⃣ 마우스 이벤트

  1. click
    요소가 클릭될 때 발생한다.
  2. dblclick
    요소가 더블 클릭될 때 발생한다.
  3. mouseenter
    마우스가 요소에 진입할 때 발생한다.
  4. mouseleave
    마우스가 요소를 벗어날 때 발생한다.
  5. mousemove
    마우스가 요소 내에서 움직일 때 발생한다.

2️⃣ 키보드 이벤트

  1. keydown
    키가 눌렸을 때 발생한다.
  2. keyup
    키가 눌렸다가 올라올 때 발생한다.
  3. keypress
    키가 눌리고 있는 동안 발생한다.

3️⃣ 폼 이벤트

  1. submit
    폼이 제출될 때 발생한다.
  2. change
    입력, 선택 또는 텍스트 영역 요소의 값이 변경될 때 발생한다.
  3. focus
    요소가 포커스를 받을 때 발생한다.
  4. blur
    요소의 포커스가 사라질 때 발생한다.

4️⃣ 문서/윈도우 이벤트

  1. load
    문서나 이미지가 로드될 때 발생한다.
  2. resize
    창의 크기가 조정될 때 발생한다.
  3. scroll
    사용자가 요소를 스크롤할 때 발생한다.

 

💡 이벤트 메소드

 

1️⃣ on()

  1. jQuery의 이벤트 핸들러를 연결하는 가장 일반적인 방법이다.
  2. 여러 이벤트와 선택자를 지원하며, 동적으로 생성된 요소에도 이벤트를 바인딩할 수 있다.
$(document).ready(function() {
    $('#myButton').on('click', function() {
        alert('Button clicked!');
    });
});

 

2️⃣ bind()

  1. jQuery 1.7 이전 버전에서 이벤트를 연결하는 방법이다.
  2. on() 메소드로 대체되었으며, 더 이상 권장되지 않는다.
$('#myButton').bind('click', function() {
    alert('Button clicked!');
});

 

3️⃣ unbind()

  1. 요소에서 이벤트 핸들러를 제거하는 메소드이다.
  2. 특정 이벤트 핸들러 또는 모든 이벤트 핸들러를 제거할 수 있다.
$('#myButton').unbind('click');

 

4️⃣ off()

  1. unbind() 메서드와 유사하지만, on() 메서드의 반대 동작으로 더 강력한 기능을 제공한다.
  2. 특정 이벤트, 특정 핸들러, 또는 네임스페이스를 사용하여 이벤트를 제거할 수 있다.
$('#myButton').off('click');

 

🚀 on()과 bind()의 차이점

 

1️⃣ 버전

  1. on()은 jQuery 1.7 이상에서 도입된 메소드이다.
  2. bind()는 jQuery 1.7 이전 버전에서 사용되던 메소드이다.

2️⃣ 기능

  1. on()은 델리게이션(delegate)을 지원한다. 즉, 이벤트 핸들러를 현재 존재하지 않는 요소에도 연결할 수 있다.
    예를 들어, 동적으로 생성된 요소에도 이벤트를 바인딩할 수 있다.
  2. bind()는 델리게이션을 지원하지 않는다. 따라서, 동적으로 생성된 요소에는 이벤트를 바인딩할 수 없다.

 3️⃣유연성

  1. on()은 여러 이벤트 타입과 네임스페이스를 지원하여 더 유연하다.
  2. bind()는 단일 이벤트 타입만 지원한다.

 

💻 이벤트 예제

 

1️⃣ on() 사용 예제

$(document).ready(function() {
    $('#myButton').on('click', function() {
        alert('Button clicked!');
    });

    // 동적 요소에 이벤트 델리게이션
    $('ul').on('click', 'li', function() {
        alert('List item clicked!');
    });
});

 

2️⃣ bind() 사용 예제

$(document).ready(function() {
    $('#myButton').bind('click', function() {
        alert('Button clicked!');
    });
});

 

3️⃣ unbind() 사용 예제

$(document).ready(function() {
    $('#myButton').bind('click', function() {
        alert('Button clicked!');
    });

    // 이벤트 핸들러 제거
    $('#myButton').unbind('click');
});

 

4️⃣ off() 사용 예제

$(document).ready(function() {
    $('#myButton').on('click', function() {
        alert('Button clicked!');
    });

    // 이벤트 핸들러 제거
    $('#myButton').off('click');
});
 

📚 제이쿼리 이벤트 종류 & 설정 총정리

jQuery 이벤트 문법 웹 페이지는 사용자와 수많은 상호작용을 하게 된다. 사용자는 마우스를 움직이거나, 요소를 클릭하거나, 텍스트 박스에 글을 쓰는 등 수많은 종류의 동작(action)을 수행한다.

inpa.tistory.com

- 출처 : inpa

 

jQuery : focus(), blur() 이벤트

focus() : 마우스 포인터가 해당 요소에 위치할 때(포커스가 되었을 때) 발생 blur() : 포커스를 잃었을 때 발생 1. input 태그에 focus(), blur() 이벤트 등록 ID : PW : input 태그에 포커스가 발생했을 때 입력

bamdal.tistory.com

- 출처 : bamdal

 

[jQuery] bind(), unbind(), on(), off() 이벤트 등록 및 해제

bind, unbind bind는 jquery의 이벤트 설정 메서드이고, unbind는 jquery의 이벤트 해제 메서드이다. jquery 1.7부터 bind/unbind가 개선되어 나온 것이 on/off 메서드이다. click! 아래와 같이 unbind와 bind를 한 번에

ggmouse.tistory.com

- 출처 : ggmouse