Ajax : Javascript라이브러리 중 하나이며 비동기식 자바스크립트이다.
브라우저가 가지고있는 XMLHttpRequest 객체를 이용해 전체 페이지를 리로드 하지않고 페이지의 일부만을 위한 데이터를 로드할 수 있다.
비동기(async)방식 : 웹 페이지를 리로드 하지않고 데이터를 불러오는 방식. 불필요한 리소스낭비를 막을 수 있다.
XMLHttpRequest를 이용한 Ajax 구현 과정
1) XMLHttpRequest 객체 구하기
2) 웹 서버에 요청 전송하기
3) 웹 서버에서 응답이 도착하면 화면에 반영
웹 서버에 요청 전송
- open() : 요청의 초기화. 3개의 인자값을 가진다.
인자1 : GET / POST / HEAD 중 하나의 방식설정
인자2 : 접속할 URL
인자3 : 동기/비동기 설정 (true의 경우 비동기)
- send() : 웹 서버에 요청 전송
GET방식으로 요구한 경우 파라미터가없다면 인자 값에 null
POST방식으로 요구한 경우 어떠한 데이터라도 서버로 전송가능
//GET방식
var xhr = new XMLHttpRequest();
xhr.open('GET', 'URL', true);
xhr.send(null);
//POST방식
var xhr = new XMLHttpRequest();
xhr.open('POST', 'URL', true);
xhr.send('id=neloi&pw=1234');
서버 응답 처리
- onreadystatechange : 서버로부터 응답이 도착하면 호출될 함수를 지정하는 프라퍼티.
- CALLBACK함수 : onreadystatechange 프로퍼티로 지정한 콜백함수
*onreadystatechange로 지정한 콜백함수는 응답이 도착할 때 뿐만 아니라 open(), send() 메서드가 호출될 때도 실행된다.
<script type="text/javascript">
function getXMLHttpRequest(){
....
}
var httpRequest =null;
function processEvent(){
httpRequest = getXMLHttpRequest();
httpRequest.onreadystatechange = callbackFunction;
httpRequest.open("GET","/test.jsp",true);
httpRequest.send(null)
}
function callbackFunction(){
//서버로부터 응답이 왔으므로 알맞은 작업을 수행
}
</script>
//HTML
<input type="button" onclick="processEvent()">
XMLHttpRequest 객체의 상태
- readyState : 위의 콜백한수가 호출되는 시점을 결정하는 프라퍼티.
- 값 / 의미 / 설명
- 0 / UNINITIALIZED / 객체만 생성되고 아직 초기화되지 않은 상태, open() 메서드가 호출되지 않았음
- 1 / LOADING / open() 메서드가 호출되고 아직 send() 메서드가 호출되지 않은 상태
- 2 / LOADED / send() 메서드가 호출되었지만 STATUS와 헤더는 도착하지 않은 상태
- 3 / INTERACTIVE / 데이터의 일부를 받은 상태
- 4 / COMPLETED / 데이터를 전부 받은 상태
* 일반적으로 readyState값이 4인 경우만 원하는 기능을 수행.
- status / status Text : 서버로부터의 응답 상태
- 값 / 텍스트 / 설명
- 200 / OK / 요청 성공
- 403 / Forbidden / 접근 거부
- 404 / Not Found / 페이지 없음
- 500 / Internal Server Error / 서버 오류
- responseText : 서버가 생성한 단순 응답 텍스트를 참조
var xhr = new XMLHttpRequest(); // 객체생성
xhr.onreadystatechange = function() { // 서버로부터 응답이 도착하면 호출될 함수
if (xhr.readyState === xhr.DONE) {
if (xhr.status === 200 || xhr.status === 201) {
console.log(xhr.responseText);
} else {
console.error(xhr.responseText);
}
}
};
xhr.open('GET', 'http://localhost:3000/single-json'); // 보내는 스트림을 연다
xhr.send(); // 스트림을 보낸다
코드가 실행되는 순서
- 1) 사용자의 이벤트가 발생하면 이벤트 처리 함수를 호출한다(AJax를 구현해놓은).
- 2) 이벤트 처리 함수에서는 XMLHttpRequest 객체의 send() 메서드를 호출한다.
- 3) XMLHttpRequest 객체의 send() 메서드가 호출되면 웹 서버에 요청이 전송된다.
- 4) 웹 서버는 알맞게 처리한 뒤 응답 결과를 XMLHttpRequest에 전송한다.
- 5) XMLHttpRequest 객체에 응답이 도착하면 onreadystatechange 프로퍼티를 통해 지정한 콜백 함수를 호출한다.
- 6) 콜백 함수 내에서 서버 측이 응답이 올바른 것인지 readyState 프로퍼티와 status 프로퍼티를 통해 판단한다.
- 7) 이상이 없으면 서버 응답 데이터를 responseText 프로퍼티를 사용하여 처리한다.
https://myeonguni.tistory.com/1526
[자바스크립트][비동기통신] XMLHttpRequest 이용한 Ajax 실습해보기
[자바스크립트][비동기통신] XMLHttpRequest 이용한 Ajax 실습해보기 1. 간단한 개념 정리 Ajax란 비동기 JavaScript와 XML을 뜻한다. 간단히 말하면, 서버측 Scripts와 통신하기 위한 XMLHttpRequest 객체를 사용..
myeonguni.tistory.com
'웹표준 > Performance & Intergration' 카테고리의 다른 글
6. hasFocus() (0) | 2020.04.17 |
---|---|
5. HTML요소의 드래그&드랍 API (0) | 2020.04.17 |
4. contenteditable 속성 (0) | 2020.04.17 |
3. history API (0) | 2020.04.17 |
1. Web Worker (0) | 2020.04.16 |