[javascript] Ajax


Ajax

μ›ΉλΈŒλΌμš°μ €λŠ” λŒ€λ‹¨νžˆ 정적인 μ‹œμŠ€ν…œμ΄μ—ˆλ‹€. λ‚΄μš©μ΄ λ°”λ€Œλ©΄ νŽ˜μ΄μ§€ μƒˆλ‘œκ³ μΉ¨μ„ ν•΄μ„œ λ‚΄μš©μ„ μƒˆλ‘­κ²Œ λ³€κ²½ν•΄μ•Ό ν–ˆλ‹€. 이것은 웹이 μ „μž λ¬Έμ„œλ₯Ό 염두에 두고 κ³ μ•ˆλœ μ‹œμŠ€ν…œμ΄κΈ° λ•Œλ¬Έμ— λ‹Ήμ—°ν•˜κ²Œ 생각 λ˜μ—ˆλ‹€.

κ·ΈλŸ¬λ‹€ Ajax κ°œλ…μ΄ λ„μž…λ˜λ©΄μ„œ λͺ¨λ“  것이 λ°”λ€Œμ—ˆλ‹€. AjaxλŠ” μ›ΉλΈŒλΌμš°μ €μ™€ μ›Ήμ„œλ²„κ°€ λ‚΄λΆ€μ μœΌλ‘œ 데이터 톡신을 ν•˜κ²Œ λœλ‹€. 그리고 λ³€κ²½λœ κ²°κ³Όλ₯Ό μ›ΉνŽ˜μ΄μ§€μ— ν”„λ‘œκ·Έλž˜λ°μ μœΌλ‘œ λ°˜μ˜ν•¨μœΌλ‘œμ¨ μ›ΉνŽ˜μ΄μ§€μ˜ λ‘œλ”© 없이 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•  수 있게 ν•œλ‹€.

AjaxλŠ” Asynchronous JavaScript and XML의 μ•½μžλ‹€. ν•œκ΅­μ–΄λ‘œλŠ” 비동기적 μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ XML μ •λ„λ‘œ 직역할 수 μžˆλŠ”λ° μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ΄μš©ν•΄μ„œ λΉ„λ™κΈ°μ μœΌλ‘œ μ„œλ²„μ™€ λΈŒλΌμš°μ €κ°€ 데이터λ₯Ό μ£Όκ³  λ°›λŠ” 방식을 μ˜λ―Έν•œλ‹€. 이 λ•Œ μ‚¬μš©ν•˜λŠ” APIκ°€ XMLHttpRequest이닀. κ·Έλ ‡λ‹€κ³  κΌ­ XML을 μ‚¬μš©ν•΄μ„œ 톡신해야 ν•˜λŠ” 것은 μ•„λ‹ˆλ‹€. 사싀 XML λ³΄λ‹€λŠ” JSON을 더 많이 μ‚¬μš©ν•œλ‹€.


μ œμ΄μΏΌλ¦¬μ™€ Ajax

Ajaxλ₯Ό μ΄μš©ν•˜μ—¬ κ°œλ°œμ„ μ†μ‰½κ²Œ ν•  수 μžˆλ„λ‘ 미리 μ—¬λŸ¬ κ°€μ§€ κΈ°λŠ₯을 포함해 놓은 개발 ν™˜κ²½μ„ Ajax ν”„λ ˆμž„μ›Œν¬λΌκ³  ν•©λ‹ˆλ‹€.

κ·Έμ€‘μ—μ„œλ„ ν˜„μž¬ κ°€μž₯ 널리 μ‚¬μš©λ˜κ³  μžˆλŠ” Ajax ν”„λ ˆμž„μ›Œν¬λŠ” λ°”λ‘œ 제이쿼리(jQuery)μž…λ‹ˆλ‹€.


$.ajax() λ©”μ†Œλ“œ

μ œμ΄μΏΌλ¦¬λŠ” Ajax와 κ΄€λ ¨λœ λ‹€μ–‘ν•˜κ³ λ„ νŽΈλ¦¬ν•œ λ©”μ†Œλ“œλ₯Ό 많이 μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

κ·Έμ€‘μ—μ„œλ„ $.ajax() λ©”μ†Œλ“œλŠ” λͺ¨λ“  제이쿼리 Ajax λ©”μ†Œλ“œμ˜ 핡심이 λ˜λŠ” λ©”μ†Œλ“œμž…λ‹ˆλ‹€.

$.ajax() λ©”μ†Œλ“œλŠ” HTTP μš”μ²­μ„ λ§Œλ“œλŠ” κ°•λ ₯ν•˜κ³ λ„ 직관적인 방법을 μ œκ³΅ν•©λ‹ˆλ‹€.

$.ajax() λ©”μ†Œλ“œμ˜ μ›ν˜•μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

$.ajax([μ˜΅μ…˜])

URL μ£Όμ†ŒλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ HTTP μš”μ²­μ„ 보낼 μ„œλ²„μ˜ μ£Όμ†Œμž…λ‹ˆλ‹€.

μ˜΅μ…˜μ€ HTTP μš”μ²­μ„ κ΅¬μ„±ν•˜λŠ” 킀와 κ°’μ˜ 쌍으둜 κ΅¬μ„±λ˜λŠ” ν—€λ”μ˜ μ§‘ν•©μž…λ‹ˆλ‹€.

λ‹€μŒ μ˜ˆμ œλŠ” $.ajax() λ©”μ†Œλ“œμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λŒ€ν‘œμ μΈ μ˜΅μ…˜μ„ μ„€λͺ…ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€.

$.ajax({

    url: "/examples/media/request_ajax.php",//ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­μ„ 보낼 μ„œλ²„μ˜ URL μ£Όμ†Œ

    data: { name: "MyName" },                // HTTP μš”μ²­κ³Ό ν•¨κ»˜ μ„œλ²„λ‘œ 보낼 데이터

    type: "GET",                             // HTTP μš”μ²­ 방식(GET, POST)

    dataType: "json"                         // μ„œλ²„μ—μ„œ 보내쀄 λ°μ΄ν„°μ˜ νƒ€μž…

})

// HTTP μš”μ²­μ΄ μ„±κ³΅ν•˜λ©΄ μš”μ²­ν•œ 데이터가 done() λ©”μ†Œλ“œλ‘œ 전달됨.

.done(function(json) {

    $("<h1>").text(json.title).appendTo("body");

    $("<div class=\"content\">").html(json.html).appendTo("body");

})

// HTTP μš”μ²­μ΄ μ‹€νŒ¨ν•˜λ©΄ 였λ₯˜μ™€ μƒνƒœμ— κ΄€ν•œ 정보가 fail() λ©”μ†Œλ“œλ‘œ 전달됨.

.fail(function(xhr, status, errorThrown) {

    $("#text").html("였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.<br>")

    .append("였λ₯˜λͺ…: " + errorThrown + "<br>")

    .append("μƒνƒœ: " + status);

})

// HTTP μš”μ²­μ΄ μ„±κ³΅ν•˜κ±°λ‚˜ μ‹€νŒ¨ν•˜λŠ” 것에 상관없이 μ–Έμ œλ‚˜ always() λ©”μ†Œλ“œκ°€ 싀행됨.

.always(function(xhr, status) {

    $("#text").html("μš”μ²­μ΄ μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€!");

});

λ‹€μŒ μ˜ˆμ œλŠ” $.ajax() λ©”μ†Œλ“œμ˜ λ™μž‘μ„ λ³΄μ—¬μ£ΌλŠ” κ°„λ‹¨ν•œ μ˜ˆμ œμž…λ‹ˆλ‹€.

$(function() {

    $("#requestBtn").on("click", function() {

        $.ajax("/examples/media/request_ajax.php")

        .done(function() {

            alert("μš”μ²­ 성곡");

        })

        .fail(function() {

            alert("μš”μ²­ μ‹€νŒ¨");

        })

        .always(function() {

            alert("μš”μ²­ μ™„λ£Œ");

        });

    });

});

load() λ©”μ†Œλ“œ

load() λ©”μ†Œλ“œλŠ” μ„ νƒν•œ μš”μ†Œμ—μ„œ ν˜ΈμΆœν•˜λŠ” μœ μΌν•œ 제이쿼리 Ajax λ©”μ†Œλ“œμž…λ‹ˆλ‹€.

load() λ©”μ†Œλ“œλŠ” μ„œλ²„μ—μ„œ 데이터λ₯Ό 읽은 ν›„, 읽어 듀인 HTML μ½”λ“œλ₯Ό μ„ νƒν•œ μš”μ†Œμ— λ°°μΉ˜ν•©λ‹ˆλ‹€.

λ˜ν•œ, μ„ νƒμžλ₯Ό URL μ£Όμ†Œμ™€ ν•¨κ»˜ μ „μ†‘ν•˜λ©΄, 읽어 듀인 HTML μ½”λ“œ μ€‘μ—μ„œ μ„ νƒμžμ™€ μΌμΉ˜ν•˜λŠ” μš”μ†Œλ§Œμ„ λ°°μΉ˜ν•©λ‹ˆλ‹€.

$(function() {

    $("#requestBtn").on("click", function() {

        // URL μ£Όμ†Œμ— μ‘΄μž¬ν•˜λŠ” HTML μ½”λ“œμ—μ„œ <li>μš”μ†Œλ₯Ό 읽은 후에 idκ°€ "list"인 μš”μ†Œμ— λ°°μΉ˜ν•¨.

        $("#list").load("/examples/tryit/htmlexample/jq_elementTraversing_etc_01.html li");

    });

});


Ajax λ©”μ†Œλ“œ

μ œμ΄μΏΌλ¦¬λŠ” $.ajax() λ©”μ†Œλ“œλΏλ§Œ μ•„λ‹ˆλΌ Ajax와 κ΄€λ ¨λœ λ‹€μ–‘ν•œ λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ©”μ†Œλ“œμ„€λͺ…
$.ajax()비동기식 Ajaxλ₯Ό μ΄μš©ν•˜μ—¬ HTTP μš”μ²­μ„ 전솑함.
$.get()전달받은 μ£Όμ†Œλ‘œ GET λ°©μ‹μ˜ HTTP μš”μ²­μ„ 전솑함.
$.post()전달받은 μ£Όμ†Œλ‘œ POST λ°©μ‹μ˜ HTTP μš”μ²­μ„ 전솑함.
$.getScript()μ›Ή νŽ˜μ΄μ§€μ— 슀크립트λ₯Ό 좔가함.
$.getJSON()전달받은 μ£Όμ†Œλ‘œ GET λ°©μ‹μ˜ HTTP μš”μ²­μ„ μ „μ†‘ν•˜μ—¬, μ‘λ‹΅μœΌλ‘œ JSON νŒŒμΌμ„ μ „μ†‘λ°›μŒ.
.load()μ„œλ²„μ—μ„œ 데이터λ₯Ό 읽은 ν›„, 읽어 듀인 HTML μ½”λ“œλ₯Ό μ„ νƒν•œ μš”μ†Œμ— λ°°μΉ˜ν•¨.