19.7 Ajax
제이쿼리에는 Ajax
호출을 간편하면서도 세밀히 컨트롤할 수 있는 메서드가 있습니다.
가장 널리 쓰는 Ajax
호출을 간편하게 바꾼 get
과 post
메서드도 있습니다.
이들 메서드는 콜백을 지원하기도 하지만, 서버 응답을 처리할 때 권장하는 방법인 프로미스를 반환하기도 합니다.
예를 들어 앞 장에서 만들었던 refreshServerInfo
예제를 다음과 같이 get
으로 고쳐 쓸 수 있습니다.
// javascript
function refreshServerInfo() {
const req = new XMLHttpRequest();
req.addEventListener('load', function() {
// TODO: 값을 HTML에 삽입하는 것은 나중에 합니다.
console.log(this.responseText)
});
req.open('GET', 'http://localhost:7070', true);
req.send();
req.addEventListener('load', function () {
// this.responseText는 JSON이 들어있는 문자열입니다.
// JSON.parse를 써서 문자열을 객체로 바꿉니다.
const data = JSON.parse(this.responseText);
// 이 예제에서는 클래스가 serverInfo인 div 의 텍스트만 교체합니다.
const serverInfo = document.querySelector('.serverInfo');
// 서버에서 반환한 객체를 키 기준으로 순회합니다.
Object.keys(data).forEach(p => {
// 텍스트를 교체할 요소를 찾습니다.
const replacements = serverInfo.querySelectorAll(`[data-replace="${p}"]`);
// 서버에서 받은 값으로 텍스트를 교체합니다.
for (let r of replacements) {
r.textContent = data[p];
}
})
})
}
// jQuery
function refreshServerInfo() {
const $serverInfo = $('.serverInfo');
$.get('http://localhost:7070').then(
// 성공한 경우
function(data) {
Object.keys(data).forEach(p => {
$(`[data-replace="${p}"]`).text(data[p]);
})
},
function(jqXHR, textStatus, err) {
console.error(err);
$serverInfo.addClass('error')
.html('Error connecting to server.');
}
)
}
보시다시피 제이쿼리를 써서 Ajax 코드를 꽤 많이 단순화할 수 있습니다.