developer.mozilla.org/ko/docs/Web/Guide/AJAX/Getting_Started

 

Ajax 시작하기 - 웹 개발자 안내서 | MDN

중요: 해당 문서는 2018/07/31 (원문 : 2018/04/23) 에 마지막으로 번역되었습니다. 원문의 변경이 잦아 내용이 다를 수 있으니 참고하십시오. 본 문서는 AJAX의 기본을 익힐수 있도록 해주며, 두 가지

developer.mozilla.org

 

ajax는 Asynchronous JavaScript And XML의 약자로써 서버와 비동기 통신을 위해 사용된다.

비동기통신이란 대부분의 웹사이트에서 서버와 데이터를 주고받을경우 페이지가 새로고침 되는데

비동기통신을 사용하면 새로고침없이 특정부분의 데이터를 변경 할 수 있다.

 

ajax를 사용하는 방법중에는 XMLHttpRequest객체를 사용하는 방법이 있다.

 

javascript에서 XMLHttpRequest객체를 생성하는 방법은 아래와 같다.

// Create XHR Object
let xhr = new XMLHttpRequest();

기본적으로 XMLHttpRequest객체를 활용하는 방법은 크게

 

3단계로 나눠지게 되는데 open(), onload() (onreadystatechange()), send()가 있다.

 

open의 경우는 5가지에 인자값을 넣을수 있는데 기본적으로 필요한것은 2가지 이다. 방식, 경로

// OPEN - type, url/file, async
xhr.open('GET', 'sample.txt', true);

 

두번째는 onloadonreadystatechange로 데이터통신이 이루어지게 되는데

 

두가지의 메서드는 크게 차이는없지만

최근에는 onreadystatechange를 사용하는것이 좋다고 한다.

경과를 좀더 세분화해서 나타내주는거 같다.

 /*
  HTTP Statues
  200 - 정상
  403 - 허용하지 않음
  404 - 경로 이상
 */

 xhr.onload = function() {
    if(this.status === 200) {
       document.getElementById("text").innerHTML = this.responseText;
    } else if (this.status === 404) {
       document.getElementById("text").innerHTML = 'Not Found';
    }
 };

 /*
  ReadyState Values
  0 (uninitialized) - (request가 초기화되지 않음)
  1 (loading) - (서버와의 연결이 성사됨)
  2 (loaded) - (서버가 request를 받음)
  3 (interactive) - (request(요청)을 처리하는 중)
  4 (complete) - (request에 대한 처리가 끝났으며 응답할 준비가 완료됨)
 */

 xhr.onreadystatechange = function() {
    if(this.readyState === 4 && this.status === 200) {
       console.log('New ' + this.responseText);
    }
 }

위와 같이 statusreadyState를 통해서 서버통신 결과를 확인하고

responseText를 통해서 결과값을 콘솔에 찍어줄수있다.

 

마지막으로 send

// Sends request
xhr.send();

뿐만 아니라 onerror라던가 여러가지 메서드들이 있다. 필요한것이 있을때마다 검색후 사용 하면된다.

xhr.onerror = function() {
   console.log('Request Error ...');
}

 

하지만 ajax의 경우는 jquery라던가 최근에는 fetch api같은 여러가지 plugin들이 존재하므로

XMLHttpRequest를 직접적으로 생성해서 사용하는 경우는 많지 않을거같다.

 

아래는 간단한 예제

 

html

<button id="button">Get Text File</button>
<br /><br />
<div id="text">
   
</div>

js

// Create Event Listener
document.getElementById('button').addEventListener('click', loadText);

function loadText() {
   // Create XHR Object
   let xhr = new XMLHttpRequest();

   xhr.open('GET', 'sample.txt', true);

   xhr.onload = function() {
      if(this.status === 200) {
         document.getElementById("text").innerHTML = this.responseText;
      } else if (this.status === 404) {
         document.getElementById("text").innerHTML = 'Not Found';
      }
   };

   xhr.onreadystatechange = function() {
      if(this.readyState === 4 && this.status === 200) {
         console.log('New ' + this.responseText);
      }
   }

   xhr.onerror = function() {
      console.log('Request Error ...');
   }

   xhr.send();
}

 

'JavaScript > ajax' 카테고리의 다른 글

js XMLHttpRequest로 데이터 가져오기  (0) 2021.04.13
jquery ajax load()  (0) 2021.02.12