onreadystatechange ์ด๋ฒคํŠธ

XMLHttpRequest๊ฐ์ฒด๋Š” ์ƒํƒœ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ readyState ์†์„ฑ์ด ๊ทธ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์ด ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ณด๊ณ  ์‘๋‹ต์ด ์™”๋Š”์ง€, ๊ทธ ์‘๋‹ต์ด ์ •์ƒ์ ์œผ๋กœ ์™”๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


์ด readyState ๊ฐ€ ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ํ•ญ์ƒ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์žˆ๋Š”๋ฐ ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ  onreadystatechange ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค.


XMLHttpRequest ๊ฐ์ฒด์˜ ์ค‘์š”ํ•œ ์„ธ ๊ฐ€์ง€ ์†์„ฑ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์†์„ฑ์„ค๋ช…
onreadystatechange readyState ์†์„ฑ๊ฐ’์ด ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋  ํ•จ์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜๋ช…์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
readyStateXMLHttpRequest ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , 0 ์—์„œ 4 ์˜ ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. 
0: ์š”์ฒญ์ด ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. 
1: ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
2: ์š”์ฒญ์ด ๋ฐ›์•„๋“ค์—ฌ์กŒ์Šต๋‹ˆ๋‹ค.
3: ์š”์ฒญ์ด ์ง„ํ–‰์ค‘์ž…๋‹ˆ๋‹ค.
4: ์š”์ฒญ์ด ์™„๋ฃŒ๋˜๊ณ  ์‘๋‹ต์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.
status200: ์ •์ƒ
404: ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.


 onreadystatechange ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  readyState๊ฐ€ 4์ด๋ฉฐ status๊ฐ€ 200์ด๋ฉด ์ •์ƒ์ ์œผ๋กœ ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋˜์–ด ์‘๋‹ต์ด ์˜จ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ์ด๋•Œ ์›ํ•˜๋Š” ์ž‘์—…์„ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ

function loadDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
  if (xhttp.readyState == 4 && xhttp.status == 200) {
    document.getElementById("demo").innerHTML = xhttp.responseText;
  }
};
์‹ค์Šตํ•˜๊ธฐ ยป

Note: onreadystatechange ์ด๋ฒคํŠธ๋Š” ํ•œ๋ฒˆ์˜ ์š”์ฒญ์„ ํ•  ๋•Œ ์ด 5๋ฒˆ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค (readyState๊ฐ€ 0์—์„œ 4๊นŒ์ง€ ๋ฐ”๋€Œ๋ฏ€๋กœ).


Callback ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ

callback ํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ์ง€๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์›น์‚ฌ์ดํŠธ์— ํ•˜๋‚˜ ์ด์ƒ์˜ AJAX ์ž‘์—…์ด ์žˆ๋‹ค๋ฉด, ๋‹จ ํ•˜๋‚˜์˜ ํ‘œ์ค€ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ XMLHttpRequest ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ๊ฐ์˜ AJAX ์ž‘์—…์ด ์žˆ์„ ๋•Œ๋งˆ๋‹ค ์ด ํ‘œ์ค€ํ•จ์ˆ˜์—์„œ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‘œ์ค€ํ•จ์ˆ˜๋Š” ๊ฐ๊ฐ์˜ AJAX์ž‘์—…์„ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ๋ฐ›์•„์„œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ

function loadDoc(cFunc) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
  if (xhttp.readyState == 4 && xhttp.status == 200) {
    cFunc(xhttp);
  }
์‹ค์Šตํ•˜๊ธฐ ยป