본문 바로가기

카테고리 없음

AJAX(Asynchronous JavaScript And Xml)

Ajax는 서버와 비동기적으로 데이터를 주고 받는 자바스크립트 기술을 의미

 

...근데 Ajax가 서버와 비동기적으로 데이터를 주고 받는다? 

 

이게 무슨말일까?      ㄴO_Oㄱ ;;

 

하나하나 알아보자~!

 

1. 서버는 무엇일까?

(아니... 나는 Ajax가 궁금했는데 왠 서버...? => Ajax는 서버와 비동기적 통신을 하기 때문에 서버가 무엇인지 알아야 한다!)

 

* 서버는 유저가 데이터를 요구하면 데이터를 보내주는 프로그램이다.

 

유저 : 서버야 나 이거줘~ 

서버 : 오케이 ~ 그거 보내드림~

 

근데 서버한테 달라고하면 무조건 주는 것일까?

 삐~ 아니다.

 

데이터를 요구하는 정확한 방법이 있다 그에 맞추어 요청한다.

 

첫번째. 데이터의 정확한 URL을 알아야한다.

두번째. 정확한 URL을 알았다면 해당하는 URL로 'GET 요청'을 한다.

 

 예시 ) naver.com이란 URL로 GET 요청을 하면 naver를  화면에 보여준다. 

 

URL을 보내서 GET 요청을 해서 가져오는 것은 알겠다..

근데 GET 요청? 이건 또 뭐지?? ㅠㅠ

 

GET 요청을 하는 방법

 

1.  주소창에 URL 을 입력하여 보내는 것, 이것이 GET 요청이다. => 보내면 데이터를 가져온다.

2. 버튼으로 GET 요청( html에서 <Form action="naver.com".. method="get"> ... <button type"submit">)

    하지만 이렇게 보내면 브라우저가 새로고침을 하면서 데이터를 보내준다. 이것이  싫다며 3번으로 !

3. Ajax로 GET 요청( 새로고침 x, 서버에게 GET요청하는 JS코드 )

   장점 : 새로운 데이터를 요구할 때 새로고침이 없이 보여주기때문에 유하게 볼 수 있다.

 


JavaScript를 써서 Ajax를 요청하는 방법

 

- 옛날 방식(길고 복잡하기 때문에 현재에는 잘 사용 안함.)

<script>

var ajax = new XMLHttpRequest();
	ajax.onreadystatechange = function() {
    	if(this.readyState == 4 && this.status == 200) {
        	console.log(ajax.responseText)
        }
      }
    };
    
    ajax.open("GET", "https://www.naver.com", true);
    ajax.send();
    
  </script>

 

- 요즘 방식

 

1. '.then()' 활용

<script>
	//fetch(URL) : fetch는 기본함수, 여기에 URL을 적으면 자동으로 GET요청을 한다.
	fetch("http://www.naver.com) 
	//then함수 뒤에 콜백함수
    .then((response) => {
     return response.json()	//콜백함수 안에있는 파라미터가 실제 수신한 데이터
    })
    .then((결과) = {
     console.log(결과)
    })
    //만약, 에러처리를 하고 싶다면? catch!
    .catch(() => {
     console.log('에러')
    })
    
 </script>
<script>
	//정확한 에러처리 => if문 처리
	fetch("http://www.naver.com) 
    .then((response) => {
     if(!response.ok) {
     throw new Error('400 아니면 500 에러 발생')
     }
     return response.json()	
    })
    .then((결과) = {
     console.log(결과)
    })
    .catch(() => {
     console.log('에러')
    })
    
 </script>

 

2. await() 활용

<script>
	async function 데이터가져오는 함수() {
    	var response = await fetch('http://www.naver.com');
        if(!response.ok) {
        	throw new Error('400 또는 500 에러발생');
           }
         var result = await response.jason();
         console.log(result)
        }
        데이터가져오는 함수().catch(()=> {
    		console.log('에러발생')
       });
 </script>

 

이 외에도 외부라이브러리를 활용해서도 사용할 수 있다.