gyeomii

AJAX(1) ๋ณธ๋ฌธ

๊ฐœ๋ฐœ

AJAX(1)

gyeomii 2023. 6. 30. 18:08
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ AJAX Test

 

    <h4>ajax๋ฅผ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก</h4>
    <button type="button">ํ™•์ธ</button>
    <div></div
$('button:button').on('click', function() {
        let request = new XMLHttpRequest();
        request.open('get', 'newTest.jsp', true);
        request.send();
        request.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                        let a = JSON.parse(this.responseText);
                      let result = "<table>";
                            result += "<tr>";
                            result += "<th>์ด๋ฆ„</th>";
                            result += "<th>์ฃผ์†Œ</th>";
                            result += "<th>๋ฒˆํ˜ธ</th>";
                            result += "</tr>";
                      $.each(a,function(){
                            result += "<tr>";
                            result += "<td>" + this.name + "</td>";
                            result += "<td>" + this.addr + "</td>";
                            result += "<td>" + this.tel + "</td>";
                            result += "</tr>";
                      });
                      result += "</table>";
                      $('div').html(result);
                }
        };
});
  • ajax๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด ํŽ˜์ด์ง€์— ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ” ์„œ๋ฒ„์— ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด XMLHttpRequest๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค.

let request = new XMLHttpRequest();
  • XMLHttpRequest๊ฐ์ฒด :
    • ์„œ๋ฒ„์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
    • ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋ฉฐ ์ฃผ๋กœ ajax์— ์‚ฌ์šฉ๋œ๋‹ค.

โœ” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์š”์ฒญ์ •๋ณด๋ฅผ ์„ค์ •ํ•˜๊ณ  ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•ด์•ผํ•œ๋‹ค.

request.open('get', 'newTest.jsp', true);
request.send();
  • request.open(method ๋ฐฉ์‹, url, async)
    • method : get๋ฐฉ์‹์ธ๊ฐ€ post๋ฐฉ์‹์ธ๊ฐ€
    • url : ์š”์ฒญํ•  ํŽ˜์ด์ง€
    • async : ๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ์ธ์ง€ ๋น„๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ์ธ์ง€ ์„ค์ •
      • true : ๋น„๋™๊ธฐ / false : ๋™๊ธฐ
      • ๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ
        • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์‹œ์— ํ†ต์‹ ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ์ˆ˜ํ–‰, ์ข…๋ฃŒ๋ฅผ ํ•จ๊ป˜ ์ง„ํ–‰ํ•œ๋‹ค.
        • ์ƒˆ๋กœ์šด ์ฝ˜ํ…์ธ ๋ฅผ ์ถ”๊ฐ€, ๋ถˆ๋Ÿฌ์˜ฌ๋•Œ ํŽ˜์ด์ง€๋ฅผ ๋ฆฌ๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค.
      • ๋น„๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ
        • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ ์–ธ์ œ๋“ ์ง€ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๊ณ  ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค.
        • ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•  ํ•„์š” ์—†๋‹ค.
        • ์ž…๋ ฅํ•œ ์–‘์‹ ๋ฐ ์ •๋ณด๊ฐ€ ๊ทธ๋ž˜๋„ ์œ ์ง€๋œ๋‹ค.
        • ํŽ˜์ด์ง€์—์„œ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ํ˜ธ์ถœํ•˜๋ฏ€๋กœ ๋ถˆํ•„์š”ํ•œ ํŠธ๋ž˜ํ”ฝ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
        • ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.
        • try-catch๊ตฌ๋ฌธ ์ ์šฉ์ด ์–ด๋ ต๋‹ค.
        • but promise ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋น„๋™๊ธฐ์‹์„ ๋™๊ธฐ์‹์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ try-catch์ ์šฉ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
  • request.send() : ์š”์ฒญ ์ •๋ณด ์„œ๋ฒ„๋กœ ์ „๋‹ฌ

โœ” ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ์‘๋‹ต ๋ฐ์ดํ„ฐ ๋ฐ›๊ธฐ

request.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
                let a = JSON.parse(this.responseText);
                let result = "<table>";
                       result += "<tr>";
                       result += "<th>์ด๋ฆ„</th>";
                       result += "<th>์ฃผ์†Œ</th>";
                       result += "<th>๋ฒˆํ˜ธ</th>";
                       result += "</tr>";
                $.each(a,function(){
                       result += "<tr>";
                       result += "<td>" + this.name + "</td>";
                       result += "<td>" + this.addr + "</td>";
                       result += "<td>" + this.tel + "</td>";
                       result += "</tr>";
                });
                result += "</table>";
                $('div').html(result);
        }
};
  • request.onreadystatechange = function(){}
    • XMLHttpRequest๊ฐ์ฒด์˜ readyState๊ฐ’์ด ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์„ค์ •ํ•œ๋‹ค.
      • XMLHttpRequest๊ฐ์ฒด๋ช….onreadystatechange = ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜(){๋‚ด์šฉ}
    • ์ด ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ ์„œ๋ฒ„์— ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ์˜ ์กด์žฌ ๋ฐ ์‘๋‹ต ๋„์ฐฉ์˜ ์ˆœ๊ฐ„์„ ํŠน์ •ํ•œ๋‹ค.
  • readyState ํ”„๋กœํผํ‹ฐ
    • readyState ํ”„๋กœํผํ‹ฐ๋Š” XMLHttpRequest ๊ฐ์ฒด์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • ์ด ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์€ ๊ฐ์ฒด์˜ ํ˜„์žฌ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ๊ธฐ๋กœ ๋ณ€ํ™”ํ•œ๋‹ค.
      ์ƒํƒœ ์ฝ”๋“œ ๊ฐ’ ์„ค๋ช…
      UNSENT 0 XMLHttpRequest ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋จ.
      OPEND 1 open() ๋ฉ”์†Œ๋“œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋จ.
      HEADERS_RECEIVED 2 ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ๋„์ฐฉํ•จ.
      LOADING 3 ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ ์ค‘์ž„.
      DONE 4 ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์–ด ์‘๋‹ตํ•  ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋จ.
  • status ํ”„๋กœํผํ‹ฐ
    • status ํ”„๋กœํผํ‹ฐ๋Š” ์„œ๋ฒ„์˜ ๋ฌธ์„œ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚œ๋‹ค.
      ์ƒํƒœ ์ฝ”๋“œ ์„ค๋ช…
      200 ์„œ๋ฒ„์— ๋ฌธ์„œ๊ฐ€ ์กด์žฌ, ์ •์ƒ์ ์œผ๋กœ ์‘๋‹ต์„ ๋ฐ›์Œ
      403 ์š”์ฒญ ์˜ค๋ฅ˜
      404 ์„œ๋ฒ„์— ๋ฌธ์„œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ, ํŽ˜์ด์ง€๋ฅผ ์ฐพ์ง€ ๋ชปํ•จ
      500 ์„œ๋ฒ„์—๋Ÿฌ

โœ” JSON๋ฐ์ดํ„ฐ ํŒŒ์‹ฑํ•˜๊ธฐ

let a = JSON.parse(this.responseText);
$.each(a,function(){
        let result = "<table>";
                result += "<tr>";
                result += "<td>" + this.name + "</td>";
                result += "<td>" + this.addr + "</td>";
                result += "<td>" + this.tel + "</td>";
                result += "</tr>";
  • newTest.jspํŒŒ์ผ ์— ๋“ค์–ด์žˆ๋Š” json object array ๋ฐ์ดํ„ฐ
[
  {"name" : "์žฅ์žฌํ›ˆ", "addr" : "๋Œ€์ „", "tel" : "010-1111-1111"},
  {"name" : "์œค์žฌ์—ด", "addr" : "๋Œ€์ „", "tel" : "010-2222-2222"},
  {"name" : "๊น€๋ฏธ์ •", "addr" : "๋Œ€์ „", "tel" : "010-3333-3333"},
  {"name" : "๊น€์„ฑ๊ฒธ", "addr" : "๋Œ€์ „", "tel" : "010-1234-1234"}
]
  • JSON Object Array๋ฐ์ดํ„ฐ๋ฅผ JavaScript์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒŒ์‹ฑํ•˜๋Š” ์ž‘์—…
  • { key : value } ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ JSON๋ฐ์ดํ„ฐ๋ฅผ key๋กœ ์ ‘๊ทผํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์˜จ๋‹ค.
  • $.each(๋ฐฐ์—ด , function(index, value){ result = this.key๊ฐ’ });
    • JSON ๊ฐ์ฒด๊ฐ€ ๋ฐฐ์—ด๋กœ ์กด์žฌํ•  ๋•Œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์˜ค๋ ค๋ฉด each๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • each๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด for, while์ฒ˜๋Ÿผ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์˜จ๋‹ค.
๋ฐ˜์‘ํ˜•

'๊ฐœ๋ฐœ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

JavaScript ์˜ˆ์ œ  (0) 2023.07.04
AJAX(2) - JSP์™€ ์—ฐ๊ณ„  (0) 2023.07.04
MVC ํŒจํ„ด  (0) 2023.06.26
[Python] JSON, CSV ์ฝ๊ณ  ์“ฐ๊ธฐ  (0) 2023.06.16
Dockerfile & Docker-compose  (0) 2023.06.08