๊ด€๋ฆฌ ๋ฉ”๋‰ด

gi_dor

04. Ajax ๋ณธ๋ฌธ

Language/JavaScript

04. Ajax

๊ธฐ๋Œ 2024. 1. 17. 18:31
728x90

๐Ÿ”ธ Ajax

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ XML ์„ ์‚ฌ์šฉํ•ด์„œ ์„œ๋ฒ„์™€์˜ ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ํ†ต์‹ 
    • ๋น„๋™๊ธฐ ํ†ต์‹  ?
      โ–ถ ์›น ํŽ˜์ด์ง€ ์—์„œ ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจ ํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ ํ•˜๋Š” ๋ฐฉ์‹
      ๋ณดํ†ต ์ผ๋ฐ˜์ ์ธ ๋™๊ธฐ์  ํ†ต์‹ ์€ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„์—์„œ ์‘๋‹ต์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค
      ๊ทธ๋™์•ˆ์—๋Š” ํ™”๋ฉด์ด ๋ฉˆ์ถ”๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์ด ์ˆ˜ํ–‰ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค
      ๋น„๋™๊ธฐ์  ํ†ต์‹ ์„ ์‚ฌ์šฉํ•˜๋ฉด ์š”์ฒญ์„ ๋ณด๋‚ธ ํ›„์—๋„ ํ™”๋ฉด์ด ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๊ณ„์†ํ•ด์„œ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค
  • XMLHttpRequest ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•ด์„œ ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•œ๋‹ค
  • ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋กœ ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค
  • ํŽ˜์ด์ง€์˜ ๋ฆฌ๋กœ๋”ฉ์—†์ด ํ™”๋ฉด์„ ์ผ๋ถ€๋ถ„ ๊ฐฑ์‹ ํ•˜๋Š”๊ฒŒ ๊ฐ€๋Šฅํ•ด์ง

์‚ฌ์šฉ ํ•˜๋Š” ์ด์œ 

  1. ํŽ˜์ด์ง€ ์ผ๋ถ€๋งŒ ๊ฐฑ์‹  : ์ „์ฒด ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ ํ•˜์ง€ ์•Š๊ณ  ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ฌ์ˆ˜ ์žˆ๋‹ค , ์ผ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ด๋“œ ํ•  ์ˆ˜ ์žˆ๋‹ค
  2. ๋น ๋ฅธ ์‘๋‹ต์‹œ๊ฐ„ : ์‚ฌ์šฉ์ž์˜ ํŽ˜์ด์ง€๋Š” ์ผ์‹œ์ ์œผ๋กœ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด ๋น ๋ฅธ ์‘๋‹ต์‹œ๊ฐ„๊ณผ ๋” ์ข‹์€ ์„ฑ๋Šฅ์„ ์–ป์„์ˆ˜ ์žˆ๋‹ค
  3. ์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ฐ์†Œ : ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ „์†กํ•˜๋ฏ€๋กœ ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๋กœ๋“œํ•  ํ•„์š”์—†์–ด ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ์ค„์—ฌ์ค€๋‹ค๊ณ  ํ•œ๋‹ค
  4. ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ : ์ฑ„ํŒ…๋ฉ”์‹œ์ง€ ๊ฐ™์€ ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์—์„œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ํ–ฅ์ƒ๋œ๋‹ค

๋Œ€ํ‘œ ๊ธฐ๋Šฅ

  • ๊ตฌ๊ธ€ ๋งต
  • ํฌํ„ธ์‚ฌ์ดํŠธ ๊ฒ€์ƒˆ๊ธฐ๋Šฅ
  • ๋Œ€๋ถ„๋ฅ˜์˜ ํ•˜์œ„๋ถ„๋ฅ˜ ์กฐํšŒ

API

  • onreadystatechange โฌ… ์ด๋ฒคํŠธ
  • XMLHRequest์˜ readyStatie ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋  ์ฝœ๋ฐฑํ•จ์ˆ˜

๐Ÿ”น ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก

  1. ์ธ๋ผ์ธ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก
  <button onclick="handler()">๋ฒ„ํŠผ</button>

function handler() {
    ์ˆ˜ํ–‰๋ฌธ;
}
  1. ์—˜๋ฆฌ๋จผํŠธ ๊ฐ์ฒด์˜ ์ด๋ฒคํŠธ ํ”„๋กœํผํ‹ฐ์— ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก
<button id="btn">๋ฒ„ํŠผ</button>

// 1. ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์กฐํšŒํ•œ๋‹ค
let element = document.getElementById("btn");

// 2. ์—˜๋ฆฌ๋จผํŠธ์˜ onclick ํ”„๋กœํผํ‹ฐ์— ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค
element.onclick = function () {
    ์ˆ˜ํ–‰๋ฌธ;
}

// ํ•ด๋‹น ์—˜๋ฆฌ๋จผํŠธ์—์„œ click ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด onclick ํ”„๋กœํผํ‹ฐ์— ๋“ฑ๋กํ•œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค 
  1. ๊ฐ์ฒด์˜ addEventListener() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก
<button id="btn">๋ฒ„ํŠผ</button>

// 1. ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์กฐํšŒํ•œ๋‹ค
let element = document.getElementById("btn");

// 2. ์—˜๋ฆฌ๋จผํŠธ์˜ addEventListener() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก
element.addEventListener("click", function () {
    ์ˆ˜ํ–‰๋ฌธ;
})

// ํ•ด๋‹น ์—˜๋ฆฌ๋จผํŠธ์—์„œ click ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด onclick ํ”„๋กœํผํ‹ฐ์— ๋“ฑ๋กํ•œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค 

 

GET ๋ฐฉ์‹

$(document).ready(function() {
     $.ajax({
            type : 'get',	// get๋ฐฉ์‹ ๋ช…์‹œ
            url : 'AjaxTest.jsp', //์ด๋™ํ•  JSPํŒŒ์ผ 
            dataType : 'text',
            success : function(data) {
                alert('๋ฐ์ดํ„ฐ ' + data);
            },
            error:function() {
                alert('์‹คํŒจ');
            }
     })
}

POST ๋ฐฉ์‹

 

 

 

<!DOCTYPE html>
<html>
<head>
  <title>Ajax ์˜ˆ์ œ</title>
  // script ์ฃผ์†Œ๋ฅผ ๋ช…์‹œ ํ•ด์•ผ jQuery๋ฅผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค
  <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
</head>
<body>

<button onclick="getData()">๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ</button>
<div id="result"></div>

<script>
function getData() {
  $.ajax({
    url: '์„œ๋ฒ„์˜_๋ฐ์ดํ„ฐ_์ œ๊ณต_URL',
    type: 'GET', // ๋ฐ์ดํ„ฐ ์ „์†ก ํƒ€์ž… 
    date : // ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ ,
    dataType : // ๋ฌธ์žํ˜•์‹์œผ๋กœ ๋ฐ›๊ธฐ,
    success: function(response) {
      // ์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ํŽ˜์ด์ง€์— ์—…๋ฐ์ดํŠธ
      $('#result').html(response);
    },
    error: function(error) {
    // ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์‹คํ–‰๋  ์ฝ”๋“œ
      console.log('์—๋Ÿฌ ๋ฐœ์ƒ: ', error);
    }
  });
}
</script>

</body>
  • ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด Ajax getData() ํ•จ์ˆ˜ ๋ฅผ ์‚ฌ์šฉํ•ด ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค
  • result ๋ผ๋Š” id๋ฅผ ๊ฐ€์ง„ div ์š”์†Œ์— ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๊ฒŒ๋œ๋‹ค.
// XMLHttp๊ฐ์ฒด ์ƒ์„ฑ
let xhr = new XMLHttpRequest();

xhr.onreadystatechange = function () {
    if (xhr.readyState == 4 && xhr.status == 200) {
        let message = xhr.responseText;

        if (message == "๊ฐ€๋Šฅ") {
            // ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ
        } else {
            // 
            // 
            // ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ
        }
    }
};

xhr.open("GET", "checkId.jsp?id=rltjs987");
xhr.send();

readyState

  • XMLHttpRequest ๊ฐ์ฒด์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค
    • 0 : ์š”์ฒญ์ด ์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์Œ
    • 1 : ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ๋จ
    • 2 : ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ๋ฐ›์•˜๋‹ค
    • 3 : ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ค‘์ด๋‹ค
    • 4 : ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ๋๋‚ด๊ณ  ์‘๋‹ต๋ฐ์ดํ„ฐ๋Š” ๋ณด๋‚ผ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค

 

status

  • ์š”์ฒญ์— ๋Œ€ํ•œ HTTP ์‘๋‹ต์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค
    • 200 : OK
    • 404 : Not Found
    • 500 : Server Error

 

responseText

  • ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค

 

responseXML

  • ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ XML Document ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค

 

Method

  • let xhr = new XMLHttpRequest()
    • XMLHttpRequest ๊ฐ์ฒด ์ƒ์„ฑ
  • xhr.open(method url , async , user , password)
    • XMLHttpRequest ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค
    • method : "GET" , "POST"
    • url : ์š”์ฒญ URL
    • async : true(๋น„๋™๊ธฐ ๋™์ž‘) , false (๋™๊ธฐ์‹ ๋™์ž‘)
    • user/password : ์‚ฌ์šฉ์ž ์ธ์ฆ์ •๋ณด
  • xhr.send()
    • ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ๋ฐ›์€ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค (GET ๋ฐฉ์‹์˜ ์š”์ฒญ์ผ ๋•Œ ์‚ฌ์šฉ ํ•œ๋‹ค)
  • xhr.setRequestHeader()
    • POST ๋ฐฉ์‹์ผ ๋•Œ HTTP ์š”์ฒญ ๋ฉ”์„ธ์ง€์˜ ํ—ค๋” ์ •๋ณด๋ฅผ ์„ค์ •ํ•œ๋‹ค
      • xhr.open("POST","text.jsp"")
      • xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
  • xhr.send(string)
    • ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค (POST ๋ฐฉ์‹์˜ ์š”์ฒญ์ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค)
    • xhr.send("title=์•ˆ๋…•&contents=์•ˆ๋…•ํ•˜์„ธ์š”")

๐Ÿ”ธ ์„œ๋ฒ„์˜ ์‘๋‹ต ์ปจํ…์ธ  ์œ ํ˜•

  • text/html
    • HTML ์ปจํ…์ธ ๋ฅผ ์‘๋‹ต ์ปจํ…์ธ ๋กœ ์ œ๊ณตํ•จ
    • ์›น ํŽ˜์ด์ง€์— ๋ฐ”๋กœ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ปจํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค
    • AJax ์š”์ฒญ์„ ๋ณด๋‚ธ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋Š” ๋ณ„๋„์˜ ์ž‘์—… ์—†์ด ์‘๋‹ต์œผ๋กœ ๋ฐ›์€ HTML ์ปจํ…์ธ ๋ฅผ ์›น ํŽ˜์ด์ง€์˜ ํŠน์ • ์˜์—ญ์— ๋ฐ˜์˜ ์‹œํ‚คํ‚ค๋งŒ ํ•˜๋ฉด๋œ๋‹ค
  • text/plain
    • ์ผ๋ฐ˜ ํ…์ŠคํŠธ ์ปจํ…์ธ ๋ฅผ ์‘๋‹ต ์ปจํ…์ธ ๋กœ ์ œ๊ณตํ•จ
    • ์‘๋‹ต ๋ฐ์ดํ„ฐ๊ฐ€ ๋งค์šฐ ๋‹จ์ˆœํ•œ ๊ฐ’์ผ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
  • text/xml
    • XML ํ˜•์‹์˜ ์ปจํ…์ธ ๋ฅผ ์‘๋‹ต ์ปจํ…์ธ ๋กœ ์ œ๊ณตํ•จ
    • ์‘๋‹ต ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค์–‘ํ•œ ๊ฐ’์ด ์•„๋‹ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค
-   XML์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ „๋‹ฌํ•  ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ๊ธฐ์ˆ ํ•  ์ˆ˜ ์žˆ๋‹ค
-   XML์€ ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ๋ผ๋ฆฌ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์†์‰ฝ๊ฒŒ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค  
  • application/json
    • JSON ํ˜•์‹์˜ ์ปจํ…์ธ ๋ฅผ ์‘๋‹ต ์ปจํ…์ธ ๋กœ ์ œ๊ณตํ•จ
    • ์‘๋‹ต ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹จ์ˆœํ•œ ๊ฐ’์ด ์•„๋‹ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค
-   JSON์€ XML๊ณผ ๋น„๊ตํ•ด ๋” ์‰ฝ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ํ‘œ์ค€์ด๋‹ค
-   JSON์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ XML์˜ ๋Œ€์•ˆ์œผ๋กœ์„œ ๊ณ ์•ˆ๋˜์—ˆ๋‹ค
-   JSON์€ XML๊ณผ ๋น„๊ตํ•ด์„œ ๊ฒฝ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ํ‘œ์ค€์ด๋‹ค

 

728x90

'Language > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

03. DOM  (0) 2024.01.15
02. ์ด๋ฒคํŠธ  (1) 2024.01.12
01. JavaScript  (0) 2024.01.12
pre-training JavaScript (9)  (1) 2023.10.20
pre-training JavaScript (8) ํ•จ์ˆ˜ , ๊ฐ์ฒด  (1) 2023.10.19