Javascript를 디버깅하다가 보게 되는 Chrome의 console창에 보게 되면
Network탭이 있습니다.
여기서 XHR만 따로 선택해서 볼 수 있는데요.
오늘은 이 XHR에 대해 정리해 보도록 하겠습니다.
1. XHR
XHR은 XMLHttpReuqest의 약자인데요.
Ajax와 같이 페이지를 리프레쉬하지 않고서도 서버와 데이터를 받아오는 등의 인터랙션을 하기위해서 사용합니다.
1-1. xhr의 간단한 구현
xhr은 구현도 매우 간단한데요.
아래와 같이 짧은 코드면 get메소드를 실행해서 결과값을 받아올 수 있습니다.
const request = new XMLHttpRequest();
function onLoadListener(){
console.log(request.responseText);
}
request.addEventListener("load", onLoadListener);
request.open("GET", "http://test.com");
request.send();
test.com이 아닌 실제 api의 url주소를 넣어보고 나서,
chrome의 inspect창을 이용해서,
XHR탭을 선택해 주면, 아래와 같이 정상적으로 get방식으로 request가 정상적으로 간것을 확인할 수 있습니다.
1-2. readyState을 이용한 구현
XHR의 readyState는 다음과 같이 구분할 수 있는데요.
이 상태에 따라서 구현을 해 볼 수 있습니다.
3부터는 데이터가 들어오고 있는 것입니다.
0 |
UNSENT |
아직 open()은 호출 않되었고, client만 생성된 상태입니다. |
1 |
OPENED |
open()메소드가 호출되었음을 의미합니다. |
2 |
HEADERS_RECEIVED |
send()가 호출되었다는 의미입니다. 이 상태에서는 headers나 status값에 접근이 가능합니다. |
3 |
LOADING |
로딩되고 있음. responseText에 데이터가 들어오고 있음을 의미합니다. |
4 |
DONE |
말 그대로 실행이 완료됨을 의미 |
var resText;
const xhr = new XMLHttpRequest(),
method = "GET",
url = "http://test.com";
xhr.open(method, url, true);
xhr.onreadystatechange = function () {
console.log('xhr.readyState', xhr.readyState);
if(xhr.readyState > 2) {
newTextReceived =
xhr.responseText.
substring(lastSize);
lastSize =
xhr.responseText.length;
callback(newTextReceived);
}
if(xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.responseText);
xhr.responseText.substring(resText);
}
};
xhr.send();
관련해서 좀 더 깊은 정보는 MDN의 문서에서 찾아 볼 수 있는데요.
아래링크를 참조해 주시면 됩니다.
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest
'Javascript, Es' 카테고리의 다른 글
CORS 는 왜 보게 되는 것인가 (0) | 2019.04.30 |
---|---|
Javascript의 객체 리터럴을 이용한 Object (0) | 2019.02.12 |