Google
[1536]
 
 
 
 
 
 
 
 
 
 
 
 
¾×¼Ç½ºÅ©¸³Æ®  
 
 
 
 
 
 
 
 
 
 
 

XMLHttpRequest(XHR) °´Ã¼´Â Internet Explore5¿¡¼­ ActiveX ÄÄÆ÷³ÍÆ® Çü½ÄÀ¸·Î °¡Àå ¸ÕÀú Á¦°øµÇ¾ú±â¶§¹®¿¡, ¸ðÁú¶ó¿Í »çÆÄ¸® À¥ºê¶ó¿ìÀú¿¡¼­ ÀÌ °´Ã¼¸¦ µµÀÔÇϱâÀü±îÁö »ç½Ç ¸¹Àº °³¹ßÀÚµéÀÌ XMLHttpRequest °´Ã¼ÀÇ »ç¿ëÀ» ²¨·ÁÇß´Ù.


XHRÀº W3C Ç¥ÁØÀÌ ¾Æ´Ï±â¶§¹®¿¡ ºê¶ó¿ìÀú¸¶´Ù ÀÛµ¿¹æ½Ä¿¡ À־ ´Ù¼Ò³ª¸¶ Â÷À̰¡ Á¸ÀçÇß¾úÁö¸¸ ÇöÀç ´ëºÎºÐÀÇ ºê¶ó¿ìÀúµéÀº XHR ±â´ÉÀ» ¼­·Î ºñ½ÁÇÏ°Ô ±¸ÇöÇϰí ÀÖ´Ù. ÇöÁ¸ÇÏ´Â ºê¶ó¿ìÀúµé Áß¿¡¼­ XHRÀ» Áö¿øÇÏÁö ¾Ê´Â ºê¶ó¿ìÀú´Â °ÅÀÇ ¾øÀ»Á¤µµ·Î ´ëºÎºÐÀÇ ºê¶ó¿ìÀúµéÀº ÇöÀç XHR À» Áö¿øÇϰí ÀÖ´Ù.

 

ajax ±¸ÇöÀÇ ½ÃÀÛÀº XHR °´Ã¼ÀÇ »ý¼º¿¡¼­ ½ÃÀÛÇÑ´Ù.

XHR Àº W3C ÀÇ Ç¥ÁØÀÌ ¾Æ´Ï¹Ç·Î, ÀÎÅͳÝÀͽºÇ÷ξ¼­´Â ActiveX Component Çü½ÄÀ¸·Î ±¸ÇöµÇ¾ú°í, ±× ¹Û¿¡ ´Ù¸¥ ºê¶ó¿ìÀúµé(FireFox, Safari, Opera)Àº native javascript °´Ã¼·Î ±¸ÇöµÇ¾ú´Ù. ÀÌ·± Â÷ÀÌÁ¡À» °í·ÁÇØ¼­ XHR °´Ã¼¸¦ ¾ò¾î¿À´Â ÀÚ¹Ù½ºÅ©¸³Æ® Äڵ带 ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.

var xmlHttp;

function createXMLHttpRequest() {
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
}

window.ActiveXObject ´Â ActiveXObject¸¦ Áö¿øÇÏ´Â ºê¶ó¿ìÀú¶ó¸é ¿ÀºêÁ§Æ®¸¦ ¸®ÅÏÇÏ°í ±×·¸Áö ¾Ê´Ù¸é null¸¦ ¸®ÅÏÇÏ°Ô µÈ´Ù. µû¶ó¼­ ¿ÀºêÁ§Æ®°¡ Á¸ÀçÇϸé if ±¸¹®Àº true ¸¦ ¹ÝȯÇϰí xmlHttp °ªÀº ActiveXObject °´Ã¼°¡ ÇÒ´çµÇ¾îÁø´Ù. if ±¸¹®ÀÌ false ¸¦ ¹ÝȯÇϸé else if ±¸ºÐÀ¸·Î À̵¿ÇÏ¿© xmlHttp °ªÀº navtive javascript °´Ã¼°¡ ÇÒ´çµÉ °ÍÀÌ´Ù.
µû¶ó¼­ À§ Äڵ带 ÀÌ¿ëÇÏ¸é ºê¶ó¿ìÀú°¡ ´Ù¸£´õ¶óµµ ÇϳªÀÇ ¸Þ¼Òµå·Î XHR °´Ã¼¸¦ »ý¼ºÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù.

 

±×·±µ¥ ¿Ö ÀÚ¹Ù½ºÅ©¸³Æ®Àϱî? ºñ½ÁÇÑ ³ðÀ¸·Î VBScrptµµ Àִµ¥ ¸»ÀÌ´Ù. ¿©±â¼­ cross-browser(ºê¶ó¿ìÀú°¡ ´Þ¶óµµ ½ÇÇàÇßÀ»¶§ ¿¡·¯¾øÀÌ °°Àº °á°ú°¡ ³ª¿Àµµ·Ï ±¸ÇöÇØ¾ß ÇÏ´Â ÄÚµù ¹æ½Ä)¸¦ °í·ÁÇØ ºÁ¾ß ÇÑ´Ù. Ajax ¿¡¼­ Á¶Â÷ IE ¿¡¼­´Â Àß ±¸µ¿µÇ°í ³ª¸ÓÁö ºê¶ó¿ìÀú¿¡¼­´Â ¾ÈµÇ´Â ŰíÀû ÄÚµù¹æ½Ä¿¡¼­´Â ÀÌÁ¦ ¹þ¾î³ªº¸ÀÚ. ÀÚ¹Ù½ºÅ©¸³Æ®´Â ÇöÁ¸ÇÏ´Â °ÅÀÇ ¸ðµç ºê¶ó¿ìÀú¿¡¼­ Áö¿ø¹Þ°í ÀÖ´Â ½ºÅ©¸³ÆÃ ¾ð¾îÀÌ´Ù. ±×¸®°í ÀÚ¹Ù½ºÅ©¸³Æ®(Netscape »ç¿¡¼­ ¸¸µé¾úÀ½)´Â ÀÚ¹Ù(JAVA, ½ã¿¡¼­ ¸¸µç ¾ð¾î)¿Í´Â ÀüÇô ´Ù¸£´Ù.  ÀÚ¹Ù½ºÅ©¸³Æ®¿¡ ´ëÇØ¼­ °£´ÜÇÏ°Ô Âü°íÇÒ °ÍÀÌ ÀÖ´Ù¸é http://www.crockford.com/javascript/javascript.html ÀÌ ½ÎÀÌÆ®¿¡ Çѹø µé¾î°¡º¸ÀÚ.

 

À̹ø¿¡´Â XHR ¿ÀºêÁ§Æ®¿¡´Â ¾î¶² ¸Þ¼Òµå°¡ ÀÖ´ÂÁö »ìÆìº¸ÀÚ.

void open(string method, string url, boolean asynch, string username, string password) : ¿äûÀ» ÃʱâÈ­ÇÑ´Ù. ÆÄ¶ó¹ÌÅÍÁß¿¡¼­ method, url µÎ°³¸¸ ÇʼöÇ׸ñÀÌ°í ³ª¸ÓÁö´Â ¼±ÅÃÇ׸ñÀÌ´Ù. method ´Â POST, GET, PUT 3°¡ÁöÁß Çϳª¸¦ »ç¿ëÇÏ¸é µÇ¸ç, url Àº ¿äûÇϰíÀÚ ÇÏ´Â ¼­¹öÀÇ url ÀÌ´Ù. asynch ´Â ¿äûÀÌ ºñµ¿±âÀÎÁö ¿©ºÎ¸¦ ÆÇ´ÜÇÏ´Â Ç׸ñÀÌ´Ù. ÀÔ·ÂÇÏÁö ¾ÊÀ¸¸é µðÆúÆ®·Î true °¡ ¼³Á¤µÇ¾î ¿äûÀº ºñµ¿±â·Î 󸮵ȴÙ. false ·Î ¼³Á¤Çϸ頿äûÀº µ¿±â·Î 󸮵DZ⠶§¹®¿¡ ¼­¹ö¿¡¼­ ÀÀ´äÀ» ¹ÞÀ»¶§±îÁö ÇÁ·Î¼¼½º´Â ±â´Ù¸®°Ô µÈ´Ù. »ç½Ç XHR À» »ç¿ëÇÏ´Â °¡Àå Å« ÀÌÁ¡ÁßÀÇ ÇϳªÀÎ ºñµ¿±â 󸮸¦ À§Çؼ­´Â asynch Ç׸ñÀ» true ·Î ¼³Á¤Çؼ­ »ç¿ëÇØ¾ß ÇÑ´Ù. false ¸¦ ¼³Á¤ÇÑ´Ù¸é XHR À» »ç¿ëÇÏ´Â ÀÌÁ¡ÀÌ ±×¸¸Å­ ÁÙ¾îµç´Ù.

 

void send(content) : ½ÇÁúÀûÀ¸·Î ¿äûÀ» ¼­¹ö·Î º¸³½´Ù. ¿äûÀÌ ºñµ¿±âÀ̸é ÀÌ ¸Þ¼Òµå´Â ¹Ù·Î ¸®ÅϵÇÁö¸¸ ¿äûÀÌ µ¿±âÀÌ¸é ¼­¹ö¿¡¼­ ÀÀ´äÀ» ¹ÞÀ»¶§±îÁö °è¼Ó ´ë±âÇÑ´Ù. content ´Â ¼±ÅûçÇ×À̸ç, DOM °´Ã¼(XML °´Ã¼)À̰ųª input stream, string °ªÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖÀ¸¸ç HttpRequest body ÀÇ ÇÑ ºÎºÐÀ¸·Î ¼­¹ö·Î Àü´ÞµÈ´Ù. content ¿¡ °ªÀ» ³Ñ±â·Á¸é open() ¸Þ¼Òµå´Â ¹Ýµå½Ã POST ·Î ¼³Á¤ÇØ¾ß Çϸç, GET ¹æ½ÄÀ¸·Î ¿äûÇÏ·Á¸é null À» ¼³Á¤ÇÏ¸é µÈ´Ù.

 

open(), send() ¸Þ¼Òµå°¡ °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â ¸Þ¼ÒµåµéÀÌ´Ù. ³ª¸ÓÁö ¸Þ¼Òµå¿¡ ´ëÇØ¼­µµ ¾Ë¾Æº¸ÀÚ.

void setRequestHeader(string header, string value) : header ¿¡ ÇØ´çÇÏ´Â value °ªÀ¸·Î HttpRequest  Çì´õ¿¡ °ªÀ» ¼³Á¤ÇÏ´Â ¸Þ¼Òµå·Î½á, ¹Ýµå½Ã open() ¸Þ¼Òµå ´ÙÀ½¿¡ À§Ä¡ÇØ¾ß ÇÑ´Ù.

 

void abort() : ¿äûÀ» ÁßÁöÇÑ´Ù.

 

string getAllResponseHeaders() : ¿äû¿¡ ´ëÀÀµÇ´Â ÀÀ´äÀÇ Çì´õÁ¤º¸¸¦ ¸®ÅÏÇÑ´Ù. Áï, Content-Length, Date, URI µîÀ» Æ÷ÇÔÇÏ´Â Çì´õÁ¤º¸¸¦ string Çü½ÄÀ¸·Î ¹ÝȯÇÑ´Ù.

 

string getResponseHeader(string header) : ÀÀ´äÀÇ Çì´õÁ¤º¸Áß¿¡¼­ header ¿¡ ´ëÀÀµÇ´Â °ªÀ» string Çü½ÄÀ¸·Î ¹ÝȯÇÑ´Ù.

 

 

À̹ø¿¡´Â XHR ÀÇ ¼Ó¼ºÁß¿¡¼­ Áß¿äÇÑ ¸î°¡Áö¸¦ ¾Ë¾Æº»´Ù.

onreadystatechange : ÀÚ¹Ù½ºÅ©¸³Æ® ÄݹéÇÔ¼ö(funtion pointer)¸¦ ÀúÀåÇÑ´Ù. ÄݹéÇÔ¼ö´Â readyState °ªÀÌ º¯ÇÒ¶§ ¸¶´Ù È£ÃâµÈ´Ù. ¿äûÀÌ ¼­¹ö·Î º¸³»Áö¸é readyState ´Â 5°¡Áö ¼ýÀÚ°ªÀ¸·Î °è¼Ó º¯È­°¡ ÀϾ°Ô µÈ´Ù.

readyState : ¿äûÀÇ »óŸ¦ ÀǹÌÇÑ´Ù.(0 = uninitialized, 1 = loading, 2 = loaded, 3 = interactive, 4 = complete)

responseText : ¼­¹öÀÇ ÀÀ´äÀ» string Çü½ÄÀ¸·Î ³ªÅ¸³½´Ù. ´Ü¼ø text¸¦ innerHTML ¼Ó¼ºÀ¸·Î Ç¥ÇöÇϱ⿡´Â ¾Ë¸ÂÁö¸¸ ³í¸®ÀûÀ¸·Î ÆÄ½ÌÇϰųª µ¿ÀûÀ¸·Î ÆäÀÌÁö ÄÁÅÙÃ÷¸¦ »ý¼ºÇϱâ´Â Èûµé´Ù.

responseXML : ¼­¹öÀÇ ÀÀ´äÀ» XML ·Î ³ªÅ¸³½´Ù. ÀÌ ¼Ó¼ºÀº DOM °´Ã¼·Î ÆÄ½ÌÇÒ ¼ö ÀÖ´Ù.

status : ¼­¹ö·ÎºÎÅÍÀÇ HTTP »óÅÂÄÚµåÀÌ´Ù.(¿¹ 200(OK), 404(NOT Found), 202(°á°ú °ªÀÌ ¾øÀ» ¶§)µîµî)

statusText : HTTP »óÅÂÄڵ忡 ´ëÇÑ ÅØ½ºÆ® °ªÀÌ´Ù.(¿¹ OK, NOT Found µîµî)

 

 


[»ùÇñ¸Çöº¸±â]

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Simple XMLHttpRequest</title>

<script type="text/javascript">
var xmlHttp;

function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}

function startRequest() {
  createXMLHttpRequest();
  xmlHttp.onreadystatechange = handleStateChange;
  xmlHttp.open("GET", "example1.xml", true);
  xmlHttp.send(null);
}

function handleStateChange() {
  if(xmlHttp.readyState == 4) {
  if(xmlHttp.status == 200) {
    alert("The server replied with: " + xmlHttp.responseText);
  }
}
}
</script>
</head>

<body>
<form action="#">
<input type="button" value="Start Basic Asynchronous Request" onclick="startRequest();"/>
</form>
</body>
</html>

<example1.html>

Hello from the server!

<2-2 example.xml ÀÇ ³»¿ë>

 

À§ Äڵ带 ½ÇÇàÇØ º¸¸é ¾Ë°ÚÁö¸¸ url ´ë½Å <2-2> ¿Í °°Àº ³»¿ëÀ» ´ã°í ÀÖ´Â simpleResponse.xml ÆÄÀÏÀ» ¿äûÇÑ´Ù. µÇµµ·Ï ´Ü¼øÇÏ°Ô XHR ÀÇ ±¸µ¿¿ø¸®¸¦ ÀÌÇØÇϴ ¸ñÀû¿¡¼­ ¼­¹ö¿¡ ¿äûÀ» Çϰí ÀÀ´äÀ» ¹Þ´Â°Í ó·³ ²Ù¸ìÀ» »ÓÀÌ´Ù. À§ ¿¹Á¦ÀÇ ±¸µ¿¼ø¼­´Â ¾Æ·¡¿Í °°´Ù.

ù°, »ç¿ëÀÚ°¡ ¹öưÀ» Ŭ¸¯Çϸé À̺¥Æ®°¡ ¹ß»ýÇØ¼­ startRequest() ¸Þ¼Òµå°¡ ½ÇÇàµÈ´Ù.

µÑ°, XHR °´Ã¼°¡ »ý¼ºµÇ°í handleStateChange() ÄݹéÇÔ¼ö°¡ XHR °´Ã¼ÀÇ onreadystatechange ¼Ó¼º¿¡ ÀúÀåµÈ´Ù.

¼Â°, GET/ºñµ¿±â ¹æ½ÄÀ¸·Î ¼­¹ö¿¡ ¿äûÀ» º¸³»´Âµ¥, À̶§ XHR °´Ã¼´Â ¼­¹öÀÇ simpleResponse.xml ÆÄÀÏÀ» ¿ä±¸ÇÑ´Ù.

³Ý°, ¼­¹ö´Â Ajax Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû url ÀÎ simpleResponse.xml À» ã¾Æ¼­ ÀÐÀº ÈÄ¿¡ string Çü½ÄÀ¸·Î XHR °´Ã¼·Î º¸³½´Ù.

´Ù¼¸Â°, Äݹé¸Þ¼Òµå´Â XHR ÀÇ state °¡ º¯ÇÒ¶§ ½ÇÇàµÇ¹Ç·Î readyState=4 À̰í stat=200 À϶§ °á°ú°ªÀ» ºê¶ó¿ìÀú¿¡ º¸³½´Ù.

Á÷Á¢ ½ÇÇàÇØº¸¸é ¾Ë°ÚÁö¸¸ Internet Explore ¹× FireFox ¿¡¼­ °°Àº °á°ú°ªÀ» ¾ò´Â´Ù.

 

À̹øÀå¿¡¼­ ¸¶Áö¸·À¸·Î »ìÆìº¼ °ÍÀº Ajax ÀÇ º¸¾È¹®Á¦ÀÌ´Ù. XHR °´Ã¼´Â ¿äûÇÒ ¼ö ÀÖ´Â ¼­¹öÀÇ ¸®¼Ò½º url ¿¡ Á¦ÇÑÀÌ °É·ÁÀÖ´Ù. Áï, Á¢±Ù ÇÒ ¼ö ÀÖ´Â ¼­¹ö ¸®¼Ò½º url Àº XHR °´Ã¼°¡ Á¸ÀçÇÏ´Â µµ¸ÞÀο¡ ÀÖ¾î¾ß ÇÑ´Ù´Â Àǹ̴Ù. ´Ù¸¥ ¸»·Î ¹Ù²Ù¸é XHR °´Ã¼¿Í ¼­¹ö ÇÁ·Î±×·¥Àº °°Àº µµ¸ÞÀο¡ ÀÖ¾î¾ß¸¸ ÇÑ´Ù. ±×·¸´Ù¸é XHR °´Ã¼°¡ ÀڱⰡ ¼ÓÇØÀÖ´Â µµ¸ÞÀÎÀÌ ¾Æ´Ñ ±× ¹Û¿¡ ÀÖ´Â ¼­¹öÀÇ url À» È£ÃâÇÏ¸é ¾î¶»°Ô µÉ±î? À̰ÍÀº ºê¶ó¿ìÀú ¸¶´Ù Â÷À̰¡ ÀÖ´Ù. IE ÀÇ °æ¿ì¿¡´Â alert âÀ» ¶ç¿ì¸é¼­ º¸¾È À§ÇØ¿ä¼Ò°¡ ÀÖÀ¸´Ï °è¼Ó ÁøÇàÇÒ °ÍÀÎÁö ¾Æ´ÑÁö¸¦ »ç¿ëÀÚ°¡ ÆÇ´ÜÇÒ ¼ö ÀÖ°Ô µÇ¾îÀÖ°í, FireFox ÀÇ °æ¿ì´Â ¿¡·¯¸¦ º¸¿©ÁÖ¸ç ¿äûÀÚü¸¦ ºê¶ó¿ìÀú¿¡¼­ Â÷´ÜÇØ ¹ö¸°´Ù.