웹브라우저는 대단히 정적인 시스템이었다. 내용이 바뀌면 페이지 새로고침을 해서 내용을 새롭게 변경해야 했다. 이것은 웹이 전자 문서를 염두에 두고 고안된 시스템이기 때문에 당연하게 생각 되었다.
그러다 Ajax 개념이 도입되면서 모든 것이 바뀌었다. Ajax는 웹브라우저와 웹서버가 내부적으로 데이터 통신을 하게 된다. 그리고 변경된 결과를 웹페이지에 프로그래밍적으로 반영함으로써 웹페이지의 로딩 없이 서비스를 사용할 수 있게 한다.
Ajax는 Asynchronous JavaScript and XML의 약자다. 한국어로는 비동기적 자바스크립트와 XML 정도로 직역할 수 있는데 자바스크립트를 이용해서 비동기적으로 서버와 브라우저가 데이터를 주고 받는 방식을 의미한다. 이 때 사용하는 API가 XMLHttpRequest이다. 그렇다고 꼭 XML을 사용해서 통신해야 하는 것은 아니다. 사실 XML 보다는 JSON을 더 많이 사용한다.
이 때 사용하는 API가 XMLHttpRequest이다. 다음 예제를 보자.
아래 코드는 현재 시간을 출력한다.
아래 코드는 time.php에 접속해서 현재 시간은 페이지에 표시한다.
코드를 분석해보자.
1 |
var xhr = new XMLHttpRequest(); |
XMLHttpRequest 객체를 생성한다.
1 |
xhr.open('GET', './time.php'); |
접속하려는 대상을 지정한다. 첫번째 인자는 form 태그의 method에 대응하는 것으로 GET/POST 방식을 주로 사용한다. 두번째 인자는 접속하고자 하는 서버쪽 리소스의 주소로 form 태그의 action에 해당한다.
1 2
3
4
5
|
xhr.onreadystatechange = function(){ if(xhr.readyState === 4 && xhr.status === 200){
document.querySelector('#time').innerHTML = xhr.responseText;
}
}
|
post 방식으로 데이터를 전송하는 방법을 알아보자.
아래 예제는 시간대와 시간의 출력 형식을 지정하는 예제다.
1 |
xhr.open('POST', './time2.php'); |
1 |
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); |
1 2
3
|
var data = ''; data += 'timezone='+document.getElementById('timezone').value;
data += '&format='+document.getElementById('format').value;
|
1 |
xhr.send(data); |
아래는 Ajax를 이용해서 전송한 데이터를 받아서 현재 시간을 출력해주는 서버쪽 구현이다.
'프로그래밍 > 자바스크립트' 카테고리의 다른 글
생활코딩 javascript 정리 - 네트워크 통신 - jQuery Ajax (0) | 2017.09.12 |
---|---|
생활코딩 javascript 정리 - 네트워크 통신 - JSON (0) | 2017.09.11 |
생활코딩 javascript 정리 - jQuery on API 사용법 (0) | 2017.09.03 |
생활코딩 javascript 정리 - jQuery 이벤트 vs 자바스크립트 이벤트 (0) | 2017.09.02 |
생활코딩 javascript 정리 - 마우스 이벤트 (0) | 2017.08.28 |
생활코딩 javascript 정리 - 문서 로딩 (0) | 2017.08.27 |
생활코딩 javascript 정리 - 이벤트 타입 폼(form) (0) | 2017.08.20 |
생활코딩 javascript 정리 - 기본동작의 취소 (0) | 2017.08.15 |