ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

JS/Javascript

AJAX / JSON

yunieyunie 2022. 9. 22. 17:32

๐Ÿ“‘ AJAX

AJAX : ๋ธŒ๋ผ์šฐ์ €์—์„œ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜์ง€ ์•Š๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด HTTP Request๋ฅผ ๋ณด๋‚ด๊ณ  ๋ฐ›์•„ JS์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ๋‚˜์€ ์‚ฌ์šฉ ๊ฒฝํ—˜ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ์›น์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

๐Ÿ“ AJAX ์‹ค์Šต

  1. AJAX๋ฅผ ์œ„ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ
    var req = new XMLHttpRequest(); // HTTP ์š”์ฒญ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ช…๋ น
  2. ์š”์ฒญ์˜ ๋ฐฉ์‹๊ณผ URL ์„ค์ •
    req.open("GET", "./data.txt"); // http request method์™€ URL ์„ค์ •
  3. ์š”์ฒญ ์ „์†ก์œ„๊นŒ์ง€ ์ž‘์„ฑ ๋ฐ ์ €์žฅํ•˜๋ฉด console์ฐฝ์— ์—๋Ÿฌ๊ฐ€ ๋œจ๋Š”๋ฐ ์ด๋Š” ์›น ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ง์ ‘ html์—์„œ data.txtํŒŒ์ผ์„ ์ฝ์–ด์˜ค๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋ธŒ๋ผ์šฐ์ € ์†์„ฑ > ๋ฐ”๋กœ๊ฐ€๊ธฐ > ๋Œ€์ƒ์˜ ๋งจ ๋์— --disable-web-security ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ณด์•ˆ ์˜ต์…˜์„ ๋น„ํ™œ์„ฑํ™” ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    req.send();

๋‹ค์‹œ ๋Œ์•„์™€์„œ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ > networkํƒญ์„ ๋ณด๋ฉด html๊ณผ data.txtํŒŒ์ผ ์‘๋‹ต์„ ๋ฐ›์€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ console์—์„œ req.response๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ…์ŠคํŠธ๊ฐ€ ์ €์žฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญํ•˜๊ธฐ ๋•Œ๋ฌธ์— send ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ํ›„ ๋ฐ”๋กœ ์ฝ”๋“œ์—์„œ ์ ‘๊ทผํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
AJAX์˜ ์ง„ํ–‰์— ๋”ฐ๋ผ ํ˜ธ์ถœ๋˜๋Š” callbackํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

readyState ์†์„ฑ

AJAX ์š”์ฒญ์— ๋”ฐ๋ผ 0~4๊นŒ์ง€ ๋ณ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

readyState ์˜๋ฏธ

  • 0 : open ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์ „
  • 1 : open ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ํ›„, send ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์ „
  • 2 : ๋ณด๋‚ธ ์š”์ฒญ์— ๋Œ€ํ•ด ์‘๋‹ต ํ—ค๋”๊ฐ€ ์ˆ˜์‹ ๋œ ํ›„
  • 3 : ์‘๋‹ต์˜ ๋ฐ”๋”” ๋ถ€๋ถ„์ด ์ˆ˜์‹ ์ค‘์ผ ๋•Œ
  • 4 : ๋ชจ๋“  ์‘๋‹ต์ด ์ˆ˜์‹ ๋˜์—ˆ์„ ๋•Œ

onreadystatechange ์†์„ฑ

readyState๊ฐ€ ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

status ์†์„ฑ

HTTP response์˜ ์‘๋‹ต ํ—ค๋”์— ๊ธฐ๋ก๋œ ์ฝ”๋“œ
Response Code ์˜๋ฏธ

  • 200 : OK
  • 404 : Not Found
  • 500 : Internal Error

์‘๋‹ต์„ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜์‹ ํ•œ ๊ฒฝ์šฐ

readyState : 4
status : 200

๊ธฐํƒ€ callback function ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ์†์„ฑ

  • onloadstart
  • onprogress
  • onabort
  • onerror
  • onload
  • ontimeout
  • onloadend

๐ŸŽˆ JSON (Javascript Object Notification)

JSON : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
ํ”„๋กœ๊ทธ๋žจ๊ฐ„์— ์ „๋‹ฌํ•˜๊ธฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์„œ๋ฒ„์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ jsonํ˜•ํƒœ๋กœ ์ „์†กํ•˜๊ณ  ์ด๋ฅผ ์ˆ˜์‹ ํ•œ ๋ธŒ๋ผ์šฐ์ €๋Š” js๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ๋ฌธ์„œ์— ๋ฐ˜์˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ–ค JSON API

  • JSON.stringify( object ) : ์ธ์ž๋กœ ๋ฐ›์€ ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜
  • JSON.parse( sring ) : ์ธ์ž๋กœ ๋ฐ›์€ ๋ฌธ์ž์—ด์„ Javascript Object๋กœ ๋ณ€๊ฒฝํ•ด ๋ฐ˜ํ™˜
    var original_obj = { pi:3.14, str:"string" }; 
      var json_str = JSON.stringify( original_obj ); // ๋ฐ˜ํ™˜ ๋ฌธ์ž์—ด{"pi":3.14,"str":"string"} 
      var parsed_obj = JSON.parse( json_str ); 
      console.log( original_obj ); // {pi: 3.14, str: "string"}
      console.log( parsed_obj ); // {pi: 3.14, str: "string"}
  • json์€ js ๊ฐ์ฒด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋งŒ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋‹ค์‹œ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— undefined, function ์€ ๋ณ€ํ™˜๋˜์ง€ ์•Š์Œ์— ์ฃผ์˜ํ•˜์„ธ์š”!

๐Ÿ’– AJAX + JSON

  1. AJAX๋ฅผ ํ†ตํ•ด JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.
    var req = new XMLHttpRequest(); 
      req.onreadystatechange = function(){ if( this.readyState == 4 ){ // ... } } 
      req.open("GET", JSON_DATA_URL); req.send();
  2. JSON.parse API๋ฅผ ์ด์šฉํ•ด ๋ฐ›์•„์˜จ JSON ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ Javascript ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    req.onreadystatechange = function(){ 
      if( this.readyState == 4 ){ 
      data = JSON.parse(this.response); //... } 
      }
  3. ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” Javascript ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. (HTML ๋ฌธ์„œ์— ๋ฐ˜์˜)
    ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ (๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๊ฐ’์„ ๋ฐ›์€ ๊ฒฝ์šฐ) ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    for( var i = 0 ; i < data.length ; i++ ){ document.write(data[i].id, data[i].msg); }

์ถœ์ฒ˜ - https://school.programmers.co.kr/learn/courses/10

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

์˜ˆ์™ธ์ฒ˜๋ฆฌ โ›”  (0) 2022.10.04
Callback Function / EventHandler  (0) 2022.09.22
DOM (Document Object Model) โšก  (0) 2022.09.21
๋Œ“๊ธ€