LHJ

I'm a FE developer.

19.7 Ajax

03 Jun 2020 » js_lj

19.7 Ajax

제이쿼리에는 Ajax 호출을 간편하면서도 세밀히 컨트롤할 수 있는 메서드가 있습니다.
가장 널리 쓰는 Ajax 호출을 간편하게 바꾼 getpost 메서드도 있습니다.
이들 메서드는 콜백을 지원하기도 하지만, 서버 응답을 처리할 때 권장하는 방법인 프로미스를 반환하기도 합니다.
예를 들어 앞 장에서 만들었던 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 코드를 꽤 많이 단순화할 수 있습니다.