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

3.1 responseText ¼Ó¼ºÀ» ÀÌ¿ëÇÑ ´Ü¼ø ¹®ÀÚ¿­ ´Ù·ç±â

 

 2Àå¿¡ À̾î À̹ø¿¡´Â innerHTML ¼Ó¼ºÀ» ÀÌ¿ëÇÑ »ùÇà Äڵ带 »ìÆìº¸ÀÚ.

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

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Using responseText with innerHTML</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", "example2.xml", true);
xmlHttp.send(null);
}

function handleStateChange() {
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
document.getElementById("results").innerHTML = xmlHttp.responseText;
}
}
}
</script>
</head>

<body>
<form action="#">
<input type="button" value="Search for Today's Activities" onclick="startRequest();"/>
</form>
<div id="results"></div>
</body>
</html>

 

<3-1 example2.html ÀÇ ³»¿ë>

 

 

<table border="1">
<tbody>
<tr>
<th>Activity Name</th>
<th>Location</th>
<th>Time</th>
</tr>
<tr>
<td>Waterskiing</td>
<td>Dock #1</td>
<td>9:00 AM</td>
</tr>
<tr>
<td>Volleyball</td>
<td>East Court</td>
<td>2:00 PM</td>
</tr>
<tr>
<td>Hiking</td>
<td>Trail 3</td>
<td>3:30 PM</td>
</tr>
</tbody>
</table>

 

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

 

 

2Àå <2-1> ¿Í <3-1>ÀÇ °¡Àå Å« Â÷ÀÌÁ¡À̶ó¸é XHR °´Ã¼ÀÇ responseText ¼Ó¼º°ªÀ» ÀÌ¿ëÇÏ¿© div ¿¤¸®¸ÕÆ®¿¡ ¹®ÀÚ¿­À» ÇÒ´çÇÏ´Â ºÎºÐÀÌ´Ù.


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

 
 

3.2 responseXML ¼Ó¼ºÀ» ÀÌ¿ëÇÑ DOM ½ÃÀÛÇϱâ 

Áö±Ý±îÁöÀÇ ¿¹Á¦¿¡¼­´Â °£´ÜÇÏ°í ´Ü¼øÇÑ ¹®ÀÚ¿­À» ó¸®Çϴµ¥ ÀûÇÕÇÑ XHR °´Ã¼ÀÇ resonseText ¼Ó¼º¸¸À» »ìÆìº¸¾Ò´Ù. ÇÏÁö¸¸ ´ë´ÜÈ÷ º¹ÀâÇÑ ÀÀ´äµ¥ÀÌÅÍÀÇ °æ¿ì´Â ´Ü¼øÇÑ ¹®ÀÚ¿­·Î ó¸®ÇÒ ¼ö ¾øÀ¸¸ç XML Çü½ÄÀ¸·Î ó¸®ÇÏ´Â °ÍÀÌ ÈξÀ ³í¸®ÀûÀ̰í È¿À²ÀûÀÏ °ÍÀÌ´Ù. ±×·¯¸é ¾î¶»°Ô ºê¶ó¿ìÀú´Â ¼­¹ö·ÎºÎÅÍ ¹ÞÀº XML Çü½ÄÀÇ µ¥ÀÌÅ͸¦ ó¸®ÇÒ ¼ö Àִ °ÍÀϱî? XML ¹®¼­´Â W3C ÀÇ DOM À» ÀÌ¿ëÇØ¼­ 󸮵ȴÙ. DOM À» Áö¿øÇÏ´Â ºê¶ó¿ìÀúµéÀº ´ç¿¬È÷ XML ¹®¼­¸¦ ´Ù·ç´Â ¸¹Àº API ¸¦ ±¸ÇöÇϰí Àֱ⠶§¹®ÀÌ´Ù. DOM Àº HTML °ú XML À» ´Ù·ç´Â API ¸¦ Á¦°øÇϰí ÀÖÀ¸¸ç, ½ºÅ©¸³Æ®¸¦ ÅëÇØ¼­ ´ÙÅ¥¸ÕÆ®¿¡ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï Á¤ÀǵǾî ÀÖ´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®´Â DOM ¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°í DOM À» ´Ù·ê¼ö ÀÖ´Â ½ºÅ©¸³ÆÃ ¾ð¾îÀÌ´Ù. ´ÙÅ¥¸ÕÆ®ÀÇ ¸ðµç ¿ä¼ÒµéÀº DOM ÀÇ ºÎºÐµéÀ̱⠶§¹®¿¡ ¿ä¼ÒÀÇ ¼Ó¼º°ú ¸Þ¼ÒµåµéÀº ÀÚ¹Ù½ºÅ©¸³Æ®·Î Á¦¾î°¡ °¡´ÉÇÏ´Ù.  ´ÙÀ½Àº XML ¹®¼­¸¦ ó¸®Çϱâ À§ÇÑ DOM ¿ä¼ÒÀÇ ¼Ó¼ºÀ» »ìÆìº¸µµ·Ï ÇÏÀÚ. childNodes : ÇöÀç ¿ä¼ÒÀÇ ÀÚ½ÄÀ» ¹è¿­·Î Ç¥ÇöÇÑ´Ù.firstChild : ÇöÀç ¿ä¼ÒÀÇ Ã¹¹øÂ° ÀÚ½ÄÀÌ´Ù.lastChild : ÇöÀç ¿ä¼ÒÀÇ ¸¶Áö¸· ÀÚ½ÄÀÌ´Ù.nextSibling : ÇöÀç ¿ä¼Ò¿Í ¹Ù·Î ´ÙÀ½ÀÇ ¿ä¼Ò¸¦ ÀǹÌÇÑ´Ù.nodeValue : ÇØ´ç ¿ä¼ÒÀÇ °ªÀ» ÀÐ°í ¾µ ¼ö ÀÖ´Â ¼Ó¼ºÀ» Á¤ÀÇÇÑ´Ù.(=data)parentNode : ÇØ´ç ¿ä¼ÒÀÇ ºÎ¸ð³ëµåÀÌ´Ù.previousSibling : ÇöÀç ¿ä¼Ò¿Í ¹Ù·Î ÀÌÀüÀÇ ¿ä¼Ò¸¦ ÀǹÌÇÑ´Ù.  ´ÙÀ½Àº XML ´ÙÅ¥¸ÕÆ®¸¦ ´Ù·ç´Â À¯¿ëÇÑ DOM ¿ä¼ÒÀÇ ¸Þ¼Òµå¸¦ »ìÆìº¸ÀÚ. getElementById(id) : ´ÙÅ¥¸ÕÆ®¿¡¼­ ƯÁ¤ÇÑ id ¼Ó¼º°ªÀ» °¡Áö°í ÀÖ´Â ¿ä¼Ò¸¦ ¹ÝȯÇÑ´Ù.getElementsByTagName(name) : ƯÁ¤ÇÑ ÅÂ±× À̸§À» °¡Áö°í ÀÖ´Â ÀÚ½Ä ¿ä¼Ò·Î ±¸¼ºµÈ ¹è¿­À» ¸®ÅÏÇÑ´Ù.hasChildNodes() : ÇØ´ç ¿ä¼Ò°¡ ÀÚ½Ä ¿ä¼Ò¸¦ Æ÷ÇÔÇϰí ÀÖ´ÂÁö¸¦ ³ªÅ¸³»´Â Boolean °ªÀ» ¸®ÅÏÇÑ´Ù.getAttribute(name) : Æ¯Á¤ÇÑ name ¿¡ ÇØ´çÇÏ´Â ¿ä¼ÒÀÇ ¼Ó¼º°ªÀ» ¸®ÅÏÇÑ´Ù.  À̹ø¿¡´Â XHR °´Ã¼ÀÇ responseXML ¼Ó¼ºÀ» ÀÌ¿ëÇÑ ¿¹Á¦¸¦ »ìÆìº½À¸·Î½á XML ´ÙÅ¥¸ÕÆ®¸¦ ´Ù·ç±â À§ÇÑ DOM °´Ã¼ÀÇ ¼Ó¼º°ú ¸Þ¼Òµå¿¡ ´ëÇØ¼­ ¾Ë¾Æº»´Ù.  

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

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Parsing XML Responses with the W3C DOM</title>

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

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

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

function handleStateChange() {
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
if(requestType == "north") {
listNorthStates();
}
else if(requestType == "all") {
listAllStates();
}
}
}
}

function listNorthStates() {
var xmlDoc = xmlHttp.responseXML;
var northNode = xmlDoc.getElementsByTagName("north")[0];

var out = "Northern States";
var northStates = northNode.getElementsByTagName("state");

outputList("Northern States", northStates);
}

function listAllStates() {
var xmlDoc = xmlHttp.responseXML;
var allStates = xmlDoc.getElementsByTagName("state");

outputList("All States in Document", allStates);
}

function outputList(title, states) {
var out = title;
var currentState = null;
for(var i = 0; i < states.length; i++) {
currentState = states[i];
out = out + "\n- " + currentState.childNodes[0].nodeValue;
}

alert(out);
}
</script>
</head>

<body>
<h1>Process XML Document of U.S. States</h1>
<br/><br/>
<form action="#">
<input type="button" value="View All Listed States" onclick="startRequest('all');"/>
<br/><br/>
<input type="button" value="View All Listed Northern States" onclick="startRequest('north');"/>
</form>
</body>
</html>

<3-4 example3.html ÀÇ ³»¿ë>  

<?xml version="1.0" encoding="UTF-8"?>
<states>
<north>
<state>Minnesota</state>
<state>Iowa</state>
<state>North Dakota</state>
</north>
<south>
<state>Texas</state>
<state>Oklahoma</state>
<state>Louisiana</state>
</south>
<east>
<state>New York</state>
<state>North Carolina</state>
<state>Massachusetts</state>
</east>
<west>
<state>California</state>
<state>Oregon</state>
<state>Nevada</state>
</west>
</states>

 

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

 

¿¹Á¦ 3-4 ´Â ´Ù¼Ò ±æ¾îº¸À̳ª XHR °´Ã¼ÀÇ responseXML ¼Ó¼ºÀ» ÀÌ¿ëÇÑ DOM °´Ã¼¸¦ ´Ù·ç´Â ¼Ó¼º ¹× ¸Þ¼Òµå¸¦ ´Ù·ç°í ÀÖ´Ù´Â ¸é¿¡¼­ ¹Ýµå½Ã ÀÌÇØÇÏ°í ³Ñ¾î°¡¾ß¸¸ ÇÑ´Ù. ¼Ò½º ÆÐÅÏÀº Áö±Ý±îÁöÀÇ ¿¹Á¦¿Í ºñ½ÁÇϹǷΠDOM ¼Ó¼º ¹× ¸Þ¼Òµå°¡ »ç¿ëµÈ ÁÖ¿ä ºÎºÐ¸¸ ¼³¸íÇϰڴÙ.

 

listAllStates() ¸Þ¼ÒµåÀÇ ¾Æ·¡ ¶óÀÎÀ» ÁÖ¸ñÇØ º¸ÀÚ.

var xmlDoc = xmlHttp.responseXML;

=> XHR °´Ã¼´Â responseXML ¼Ó¼ºÀ» ÀÌ¿ëÇØ¼­ ¼­¹ö·ÎºÎÅÍÀÇ XML °á°ú ´ÙÅ¥¸ÕÆ®¸¦ ´Ù·ê¼ö ÀÖ´Â DOM ¼Ó¼º ¹× ¸Þ¼Òµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØÁشٴ °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.


var allStates = xmlDoc.getElementsByTagName("state");

=>XML °á°ú ´ÙÅ¥¸ÕÆ®·ÎºÎÅÍ state ÀÚ½Ä ¿¤¸®¸ÕÆ®µé·Î ±¸¼ºµÈ ¹è¿­À» ¾ò¾î¿Í allStates º¯¼ö¿¡ ÇÒ´çÇÏ´Â ·ÎÁ÷ÀÌ´Ù.

 

listNorthStates() ¸Þ¼Òµå¸¦ »ìÆìº¸ÀÚ.

var northNode = xmlDoc.getElementsByTagName("north")[0];

=> XML ´ÙÅ¥¸ÕÆ®¿¡¼­ north ¾Ù¸®¸ÕÆ®´Â À¯ÀÏÇÏ°Ô Çϳª¸¸ Á¸ÀçÇϹǷΠÀÚ½Ä ¾Ù¸®¸ÕÆ®·Î ±¸¼ºµÈ ¹è¿­Áß¿¡¼­ ù¹øÂ°(0) ¹è¿­°ªÀ» ¾ò¾î¿Í¾ß ÇÑ´Ù. À§ ½ÄÀº ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤Çصµ °á°ú´Â °°´Ù.

var northNode = xmlDoc.getElementsByTagName("north").item(0);

 

outputList() ¸Þ¼Òµå¸¦ »ìÆìº¸ÀÚ.

out = out + "\n- " + currentState.childNodes[0].nodeValue;

=> À̺κÐÀº °¢°¢ÀÇ state ¾Ù¸®¸ÕÆ®ÀÇ Ã¹¹øÂ° ÀÚ½Ä ³ëµåÀÇ °ªÀ» out º¯¼ö¿¡ °è¼Ó ¿¬°áÇÏ´Â ºÎºÐÀÌ´Ù. state ¾Ù¸®¸ÕÆ®ÀÇ °ªÀ» Ç¥ÇöÇϰí ÀÖ´Â ºÎºÐµµ XML ¿¡¼­´Â ÇϳªÀÇ text ¿¤¸®¸ÕÆ®ÀÌ´Ù. µû¶ó¼­ °¢°¢ÀÇ state ¿¤¸®¸ÕÆ®ÀÇ Ã¹¹øÂ° text ÀڽĠ¿¤¸®¸ÕÆ®¸¦ childNodes[0] À¸·Î Ç¥½ÃÇÑ °ÍÀÌ¸ç ±× °ªÀ» °¡Á®¿À±â À§Çؼ­ nodeValue ¼Ó¼ºÀÌ »ç¿ëµÈ °ÍÀÌ´Ù. nodeValue ´Â ¾Æ·¡¿Í °°ÀÌ data ¼Ó¼ºÀ» »ç¿ëÇØµµ °°Àº °á°ú¸¦ ¾ò´Â´Ù.

out = out + "\n- " + currentState.childNodes[0].data;

 

 

3.3 Dynamic DOM °´Ã¼ ´Ù·ç±â

 

Áö±Ý±îÁö´Â DOM ÀÇ ±âÃÊÀûÀÎ ¼Ó¼º ¹× ¸Þ¼ÒµåµéÀ» ´Ù·ç¾î ºÃ´Ù. ÀÌ·± ¼Ó¼ºÀ¸·Î´Â ´ÙÀ̳ª¹ÍÇÑ À¥ÆäÀÌÁö¸¦ ±¸¼ºÇϴµ¥ ÇѰ谡 ÀÖ´Ù. À¥ÆäÀÌÁö Àüü°¡ ¸®·Îµù µÇÁö ¾Ê°í ÀûÀýÇÑ ½ÃÁ¡¿¡ ÇÊ¿äÇÑ ºÎºÐ¸¸ ¼­¹ö¿Í Åë½ÅÇÏ¿© µ¥ÀÌÅͰ¡ ¼öÁ¤µÇ´Â µ¿ÀûÀÎ À¥ÆäÀÌÁö¸¦ ¸¸µé·Á¸é ´õ ´Ù¾çÇÑ DOM ÀÇ ¼Ó¼ºÀ» ÀÍÇô¾ß ÇÑ´Ù. ÀÚ, ±×·³ ÄÁÅÙÃ÷¸¦ µ¿ÀûÀ¸·Î »ý¼ºÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â W3C DOM ÀÇ ¼Ó¼º°ú ¸Þ¼Òµå¿¡´Â ¾î¶²°ÍµéÀÌ ÀÖ´ÂÁö ¾Ë¾Æº¸ÀÚ.

document.createElement(tagName) : tagName À¸·ÎµÈ ¿¤¸®¸ÕÆ®¸¦ »ý¼ºÇÑ´Ù. div ¸¦ ¸Þ¼Òµå ÆÄ¶ó¹ÌÅÍ·Î ÀÔ·ÂÇϸé div ¿¤¸®¸ÕÆ®°¡ »ý¼ºµÈ´Ù.

document.createTextNode(text) : Á¤Àû ÅØ½ºÆ®¸¦ ´ã°í ÀÖ´Â ³ëµå¸¦ »ý¼ºÇÑ´Ù.

<element>.appendChild(childNode) : ƯÁ¤ ³ëµå¸¦ ÇöÀç ¿¤¸®¸ÕÆ®ÀÇ ÀÚ½Ä ³ëµå¿¡ Ãß°¡½ÃŲ´Ù. (¿¹¸¦µé¾î select ¿¤¸®¸ÕÆ®¿¡ option ¿¤¸®¸ÕÆ® Ãß°¡)

<element>.getAttribute(name) : ¼Ó¼º¸íÀÌ name ÀÎ ¼Ó¼º°ªÀ» ¹ÝȯÇÑ´Ù.

<element>.setAttribute(name, value) : ¼Ó¼º°ª value ¸¦ ¼Ó¼º¸íÀÌ name ÀÎ °÷¿¡ ÀúÀåÇÑ´Ù.

<element>.insertBefore(newNode, tartgetNode) : newNode ¸¦  tartgetNode Àü¿¡ »ðÀÔÇÑ´Ù.

<element>.removeAttribute(name) : ¿¤¸®¸ÕÆ®¿¡¼­ name ¼Ó¼ºÀ» Á¦°ÅÇÑ´Ù.

<element>.removeChild(childNode) : ÀÚ½Ä ¿¤¸®¸ÕÆ®¸¦ Á¦°ÅÇÑ´Ù.

<element>.replaceChild(newNode, oldNode) : oldNode ¸¦ newNode ·Î ġȯÇÑ´Ù.

<element>.hasChildNodes() : ÀÚ½Ä ³ëµå°¡ Á¸ÀçÇÏ´ÂÁö ¿©ºÎ¸¦ ÆÇ´ÜÇÑ´Ù. ¸®ÅÏÇü½ÄÀº Boolean ÀÌ´Ù.

 

¿©±â¼­ ÇѰ¡Áö ¤°í ³Ñ¾î°¥ ºÎºÐÀÌÀÖ´Ù. ÇöÀç °ÅÀÇ ¸ðµç ºê¶ó¿ìÀú´Â DOM À» Áö¿øÇϰí ÀÖÀ¸¸ç API ¶ÇÇÑ ºñ½ÁÇÏ°Ô µ¿ÀÛÇϵµ·Ï ±¸ÇöµÇ¾î ÀÖ´Ù. Á¤È®È÷ ¸»ÇÏÀÚ¸é DOM API ÀÇ ±¸ÇöÀÌ ºê¶ó¿ìÀú¸¶´Ù ´Ù¼Ò Â÷À̰¡ ÀÖ´Ù´Â ¸»ÀÌ´Ù. °¡Àå ȣȯÀÌ ¾ÈµÇ´Â ºê¶ó¿ìÀú´Â ´Ù¸§¾Æ´Ñ ÀÎÅÍ³Ý ÀͽºÇ÷ξî´Ù. AJAX ÀÇ ÇÙ½ÉÀº XMLHttpRequest °´Ã¼ÀÌ°í °¡Àå ¸ÕÀú ÀÌ °´Ã¼¸¦ ±¸ÇöÇϰí Á¦°øÇÑ ºê¶ó¿ìÀú°¡ IE5ÀÓÀ» °¨¾ÈÇÒ¶§ »ó´çÈ÷ ¾ÆÀÌ·¯´ÏÄÃÇÏÁö ¾ÊÀº°¡? 2000³â IE °¡ Àü¼¼°è ºê¶ó¿ìÀúÀÇ ½ÃÀåÁ¡À¯À² 95% Â÷ÁöÇÒ ÁîÀ½, IE ¿¡ ´ëÀûÇÒ ¸¸ÇÑ ºê¶ó¿ìÀú´Â Á¸ÀçÇÏÁö ¾Ê¾Ò´Ù. ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®°¡ ´Ù¾çÇÑ À¥Ç¥ÁØ ±¸ÇöÀ» Æ÷±âÇß´ø ½ÃÁ¡ÀÌ ¹Ù·Î À̶§ºÎÅÍ´Ù. À̶§±îÁö XHR ÀÇ »ç¿ëÀº ´ç¿¬È÷ ÀúÁ¶ÇÒ ¼ö¹Û¿¡ ¾ø¾ú´Ù. ÇÏÁö¸¸ ¸ðÁú¶ó¿Í »çÆÄ¸®°¡ ÀÕµû¶ó ±¤¹üÀ§ÇÏ°Ô Áö¿øÀ» ½ÃÀÛÇÏ°Ô µÇÀÚ »óȲÀº º¯Çϱ⠽ÃÀÛÇß°í,  »ç¿ëÀ²ÀÌ ±ØÈ÷ ºÎÁøÇß´ø XHR °´Ã¼´Â W3C ÀÇ Ç¥ÁØÀ¸·Î±îÁö ÀÚ¸®¸Å±èÇÏ°Ô µÇ¾ú´Ù. ´õ¿ì±â ±¸±Û¸Ê, ±¸±Û Suggest, Gmail, Flickr, Netflix µî¿¡¼­ AJAX ¸¦ »ç¿ëÇÏÀÚ ÀÌÁ¦´Â ¸í½Ç»óºÎÇÑ À¥ÀÇ Ç¥ÁØÀ¸·Î °Åµì³ª°Ô µÇ¾ú´Ù. ³Ê¹« ´Ê¾úÁö¸¸ Microsoft ÂÊ¿¡¼­µµ ¸¹Àº ºÐ¹ßÀ» Ã˱¸ÇÑ´Ù. ±×·¯¸é IE ¿¡¼­ ¹®Á¦°¡ µÇ°í ÀÖ´Â DOM °´Ã¼ÀÇ Æ¯Â¡À» °£·«È÷ »ìÆìº¸ÀÚ.

ù°, IE ¿¡¼­´Â <table> ¿¡ <tr> À» Ãß°¡ÇÒ¶§ appendChilde() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ´õ¶óµµ <tr> Àº ³ªÅ¸³ªÁö ¾Ê´Â´Ù. µû¶ó¼­ <tr> À» <tbody> ¿¡ Ãß°¡ÇØ ÁÖ´Â ¹æ½ÄÀ» »ç¿ëÇØ¾ß ¸ðµç ºê¶ó¿ìÀú¿¡¼­ µ¿ÀÛÇÏ´Â Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.

µÑ°, IE ¿¡¼­´Â setAttribute() ¸Þ¼Òµå¿¡ class ¼Ó¼ºÀ» ÀÌ¿ëÇÒ ¼ö ¾ø´Ù. setAttribute("class", "newClassName") ÇÑ ÈÄ¿¡ ´Ù½Ã setAttribute("className", "newClassName") À» ÇØ¾ß ¸ðµç ºê¶ó¿ìÀúÀÇ È£È¯¼ºÀ» º¸ÀåÇÒ ¼ö ÀÖ´Ù.

¼Â°, IE ¿¡¼­´Â style ¼Ó¼º¿¡ setAttribute() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÒ ¼ö ¾ø´Ù. <element>.setAttribute("style, font-weight:bold;") ¶ó°í ÇÏ´Â ´ë½Å¿¡ <element>.style.cssText = "font-weight:bold"  ¶ó°í ÇØ Áà¾ß ¸ðµç ºê¶ó¿ìÀú¿¡¼­ Á¦´ë·Î ÀÛµ¿ÇÑ´Ù.

 

´ÙÀ½Àº DOM ÀÇ µ¿Àû ¼Ó¼º ¹× ¸Þ¼Òµå¸¦ ÀÌ¿ëÇØ¼­ ´ÙÀ̳ª¹ÍÇÑ À¥ÆäÀÌÁö¸¦ »ý¼ºÇÏ´Â ¿¹Á¦¸¦ ´Ù·ç¾î º¸°Ú´Ù.

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

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Dynamically Editing Page Content</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 doSearch() {
createXMLHttpRequest();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", "example4.xml", true);
xmlHttp.send(null);
}

function handleStateChange() {
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
clearPreviousResults();
parseResults();
}
}
}

function clearPreviousResults() {
var header = document.getElementById("header");
if(header.hasChildNodes()) {
header.removeChild(header.childNodes[0]);
}

var tableBody = document.getElementById("resultsBody");
while(tableBody.childNodes.length > 0) {
tableBody.removeChild(tableBody.childNodes[0]);
}
}

function parseResults() {
var results = xmlHttp.responseXML;

var property = null;
var address = "";
var price = "";
var comments = "";

var properties = results.getElementsByTagName("property");
for(var i = 0; i < properties.length; i++) {
property = properties[i];
address = property.getElementsByTagName("address")[0].firstChild.nodeValue;
price = property.getElementsByTagName("price")[0].firstChild.nodeValue;
comments = property.getElementsByTagName("comments")[0].firstChild.nodeValue;

addTableRow(address, price, comments);
}

var header = document.createElement("h2");
var headerText = document.createTextNode("Results:");
header.appendChild(headerText);
document.getElementById("header").appendChild(header);

document.getElementById("resultsTable").setAttribute("border", "1");
}

function addTableRow(address, price, comments) {
var row = document.createElement("tr");
var cell = createCellWithText(address);
row.appendChild(cell);

cell = createCellWithText(price);
row.appendChild(cell);

cell = createCellWithText(comments);
row.appendChild(cell);

document.getElementById("resultsBody").appendChild(row);
}

function createCellWithText(text) {
var cell = document.createElement("td");
var textNode = document.createTextNode(text);
cell.appendChild(textNode);

return cell;
}
</script>
</head>

<body>
<h1>Search Real Estate Listings</h1>

<form action="#">
Show listings from
<select>
<option value="50000">$50,000</option>
<option value="100000">$100,000</option>
<option value="150000">$150,000</option>
</select>
to
<select>
<option value="100000">$100,000</option>
<option value="150000">$150,000</option>
<option value="200000">$200,000</option>
</select>
<input type="button" value="Search" onclick="doSearch();"/>
</form>



<span id="header">

</span>

<table id="resultsTable" width="75%" border="0">
<tbody id="resultsBody">
</tbody>
</table>
</body>
</html>


<3-9 example4.html ÀÇ ³»¿ë>

 

<?xml version="1.0" encoding="UTF-8"?>
<properties>
<property>
<address>812 Gwyn Ave</address>
<price>$100,000</price>
<comments>Quiet, serene neighborhood</comments>
</property>
<property>
<address>3308 James Ave S</address>
<price>$110,000</price>
<comments>Close to schools, shopping, entertainment</comments>
</property>
<property>
<address>98320 County Rd 113</address>
<price>$115,000</price>
<comments>Small acreage outside of town</comments>
</property>
</properties>

 

<3-10 example4.xml ÀÇ ³»¿ë>

 

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

»ùÇà 3-9¸¦ º¸¸é µ¿Àû ¸Þ¼Òµå°¡ Àû¿ëµÈ ºÎºÐÀº ±½°Ô Ç¥½Ã¸¦ ÇØ ³õ¾Ò´Ù. À̺κÐÀ» ÀÌÀü »ùÇõé°ú ºñ±³ÇØ °¡¸é¼­ º¸¸é Äڵ带 ÀÌÇØÇϴµ¥ Å« ¾î·Á¿òÀº ¾øÀ¸¸®¶ó »ý°¢ÇÑ´Ù. ½ÇÇà°á°ú´Â 3-10 ±×¸²¿¡ ³ª¿ÍÀÖ´Ù. Search ¹öưÀ» ´©¸£¸é dynamicContent.xml ÀÇ ³»¿ëÀ» Å×À̺í·Î Ç¥½ÃÇÑ´Ù. Search ¹öưÀ» ´©¸£¸é ±âÁ¸¿¡ Á¸ÀçÇÏ´Â Å×À̺í row ¸¦ µ¿ÀûÀ¸·Î Á¦°ÅÇÑ ÈÄ¿¡ µ¿ÀûÀ¸·Î ´Ù½Ã ±×¸°´Ù. À̹ø ¿¹Á¦´Â ÀÌ ºÎºÐÀÌ ÇÙ½ÉÀ¸¹Ç·Î °¡Àå Áß¿äÇÑ Äڵ常À» ¼³¸íÇϰڴÙ.

 

function createCellWithText(text) {
    var cell = document.createElement("td");
    var textNode = document.createTextNode(text);
    cell.appendChild(textNode);
   
    return cell;
}

 

À§ ¸Þ¼Òµå´Â Å×À̺í Ä÷³(<td></td>)¿¡ ÇØ´çÇÏ´Â Á¤º¸¸¦ »ý¼ºÇÏ´Â ¸Þ¼ÒµåÀÌ´Ù. 3-10 ±×¸²À» º¸¸é ÇϳªÀÇ row ¿¡´Â 3°³ÀÇ Ä÷³ ¿ä¼Ò°¡ ÀÖÀ¸¸ç µ¿ÀûÀ¸·Î ÇϳªÀÇ ÇàÀ» »ý¼ºÇϱâ À§Çؼ­´Â address, price, comments ¿¡ ÇØ´çÇÏ´Â td ¿ä¼Ò¸¦ °¢°¢ »ý¼ºÇؾߠÇÑ´Ù.

 

function addTableRow(address, price, comments) {
    var row = document.createElement("tr");
    var cell = createCellWithText(address);
    row.appendChild(cell);
   
    cell = createCellWithText(price);
    row.appendChild(cell);
   
    cell = createCellWithText(comments);
    row.appendChild(cell);
   
    document.getElementById("resultsBody").appendChild(row);
}

 

À§ ¸Þ¼Òµå´Â Å×À̺í Çà(<tr></tr>)¿¡ ÇØ´çÇÏ´Â Á¤º¸¸¦ »ý¼ºÇؼ­ Å×ÀÌºí¿¡ Ãß°¡ÇÏ´Â ¸Þ¼ÒµåÀÌ´Ù. ¹Ù·Î À§¿¡¼­ ¾ð±ÞÇßµíÀÌ ÇàÀ» ±¸¼ºÇϰíÀִ 3°³ÀÇ Ä÷³ ¿ä¼Ò¸¦ °¢°¢ ¸¸µé¾î¼­ row º¯¼ö¿¡ Ãß°¡ÇÑ ÈÄ, ÀÌ º¯¼ö¸¦ ´Ù½Ã tbody ¼Ó¼º¿¡ Ãß°¡Çϸ頱׸² 3-10°ú °°Àº È­¸éÀÌ ¿Ï¼ºµÇ´Â °ÍÀÌ´Ù.

 

 

 

3.4 ¿äû ÆÄ¶ó¹ÌÅ͸¦ ¼­¹ö·Î º¸³»±â

 

Áö±Ý±îÁö´Â ajax¸¦ ÀÌ¿ëÇÏ¿© ¿äûÀ» ¼­¹ö·Î º¸³»´Â ¹æ¹ý°ú ¼­¹ö·ÎºÎÅÍ ¹ÞÀº °á°ú Á¤º¸¸¦ ÆÄ½ÌÇØ¼­ ó¸®Çϴ ¿©·¯ Ư¡µé¿¡ ´ëÇØ¼­ »ìÆìº¸¾Ò´Ù. ÇÏÁö¸¸ À̰͸¸À¸·Î´Â ºÎÁ·ÇÏ´Ù. xml ÀÇ °íÁ¤µÈ Á¤º¸¸¦ ´Ù·ç´Â °ÍÀÌ ½ÇÁõ³ªÁö ¾Ê´Â°¡? ¿äûÀ» º¸³¾¶§ ƯÁ¤ ÆÄ¶ó¹ÌÅ͸¦ ½Ç¾î¼­ ¼­¹ö¿¡ º¸³»°í, ¼­¹ö´Â ¿äûÁ¤º¸¸¦ ¹ÙÅÁÀ¸·Î ƯȭµÈ ÀÀ´äÁ¤º¸¸¦ º¸³»¾ß¸¸ ¾µ¸¸ÇØ Áø´Ù.

 

XMLHttpRequest(XHR) Àº °íÀüÀû À¥ÀÇ GET/POST ¹æ½Ä°ú Èí»çÇÏ°Ô µ¿ÀÛÇÑ´Ù. GET ¹æ½ÄÀº name=value ½ÖÀÇ ÆÄ¶ó¸¶Å͸¦ url ¿¡ ½Ç¾î¼­ ¼­¹ö·Î Àü¼ÛÇÑ´Ù. ¹°·Ð name=value ½ÖÀº ¸®¼Ò½º url ÀÇ ³¡À» ÀǹÌÇÏ´Â ? ÀÌÈÄ¿¡ ±¸ºÐÀÚ(&) ¸¦ »çÀÌ»çÀÌ¿¡ ³¢°í ÁÖ¿í ºÙ´Â´Ù.

 

POST ¹æ½ÄÀº GET ¹æ½Ä°ú ¸¶Âù°¡Áö·Î name=value ½ÖÀÇ ÇüÅ·Πµ¥ÀÌÅ͸¦ Àü´ÞÇÑ´Ù. ¹°·Ð °°Àº ±¸ºÐÀÚ (&)¸¦ »ç¿ëÇÑ´Ù. ÇÏÁö¸¸ POST ¹æ½ÄÀº Æû ¿ä¼ÒÀÇ µ¥ÀÌÅ͸¦ ÀÎÄÚµùÇÏ¿© Http Request °´Ã¼ÀÇ body ¿¡ ÀúÀåÇØ¼­ º¸³½´Ù.

 

¶Ç ´Ù¸¥ Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù¸é ¼­¹ö·Î º¸³¾ ¼ö ÀÖ´Â ¿äûÁ¤º¸ÀÇ Å©±âÀε¥, GET ¹æ½ÄÀ¸·Î´Â name1=value1&name2=value2&name3=value3... ÀÌ·± ¹®ÀÚ¿­ÀÇ ±æÀ̰¡, ºê¶ó¿ìÀú¸¶´Ù Â÷À̰¡ ÀÖÁö¸¸, ´ë·« 2000 byte ÀÌ»óÀÌ¸é ºÒ°¡´ÉÇÏ´Ù. ºÒ°¡´ÉÇÏ´Ù´Â Àǹ̰¡ ¹«¾ùÀÌ³Ä ÇÏ¸é ºê¶ó¿ìÀú´Â ¿äûÁ¤º¸¸¦ º¸³»·Á°í ½Ãµµ´Â ÇÏÁö¸¸ 󸮰¡ ¾ÈµÇ±â ¶§¹®¿¡ ÇÁ·¯¼¼½º´Â Áß´ÜµÇ°í ¸¸´Ù. µû¶ó¼­ ¼­¹ö·Î º¸³»´Â ÆÄ¶ó¹ÌÅͰ¡ ¸¹À» ¶§´Â POST ¹æ½ÄÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ÀϹÝÀûÀ¸·Î µ¥ÀÌÅ͸¦ fetch(°Ë»ö) ÇÒ¶§´Â GET ¹æ½ÄÀ» »ç¿ëÇÏ°í ±× ÀÌ¿ÜÀÇ ÀÛ¾÷(Ãß°¡, ¼öÁ¤, »èÁ¦)¿¡´Â POST ¹æ½ÄÀ» ÁÖ·Î »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î Ŭ¸¯Çؼ­ ÇöÀç ÀÌ ±ÛÀ» Àаí ÀÖ´Â °æ¿ì´Â GET ¹æ½ÄÀÌ »ç¿ëµÇ¾úÀ» °ÍÀ̰í, ÀÌ ±ÛÀ» ¼öÁ¤ÇÒ¶§´Â POST ¹æ½ÄÀÌ »ç¿ëµÉ °ÍÀÌ´Ù. 

 

Ajax¿Í °ü·ÃµÈ Â÷ÀÌÁ¡À̶ó¸é GET ¹æ½ÄÀº ÆÄ¶ó¹ÌÅͰ¡ ÀÎÄÚµùµÇ¾î url ¿¡ ºÙ¾î°¡±â ¶§¹®¿¡ ÇØ´ç url À» Åë°·Î Àç»ç¿ë(bookmark) °¡´ÉÇÏÁö¸¸ ajax Ư¼º»ó ÀÌ·± ºÏ¸¶Å· ±â´ÉÀº ºÒ°¡´É ÇÏ´Ù. HTML Æû ¿ä¼Ò¿¡´Â method ¼Ó¼ºÀÌ Àִµ¥ °³¹ßÀÚ´Â GET ¶Ç´Â POST ¹æ½ÄÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ¿äû µ¥ÀÌÅ͵éÀº ¼­¹ö·Î submit µÉ¶§ method¼Ó¼º¿¡ ¾Ë¸Âµµ·Ï ÀÚµ¿À¸·Î ÀÎÄÚµùµÇÁö¸¸ XHR °´Ã¼´Â ÀÌ·± ³»Àå ¾Ë°í¸®ÁòÀÌ ¾ø±â ¶§¹®¿¡ °³¹ßÀÚ°¡ Äõ¸® ½ºÆ®¸µÀ» ÀÛ¼ºÇØ¾ß ÇÑ´Ù. Äõ¸® ½ºÆ®¸µÀ» ÀÛ¼ºÇÏ´Â ¹æ¹ýÀº GET ¶Ç´Â POST ¹æ½Ä¿¡ »ó°ü¾øÀÌ µ¿ÀÏÇÏ´Ù. À¯ÀÏÇÑ Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù¸é GET ¹æ½ÄÀÇ Äõ¸® ½ºÆ®¸µÀº ¿äû url ¿¡ ºÙ¾î¼­ ¼­¹ö·Î Àü¼ÛµÇÁö¸¸ POST ¹æ½ÄÀÇ Äõ¸® ½ºÆ®¸µÀº XHR °´Ã¼ÀÇ send(Äõ¸® ½ºÆ®¸µ) ¸Þ¼Òµå°¡ È£ÃâµÉ¶§ ÆÄ¶ó¹ÌÅÍ·Î Àü¼ÛµÈ´Ù. »ùÇÃÀ» »ìÆìº¸¸é¼­ ajax ¿¡¼­ GET ¹× POST ¹æ½ÄÀ» ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö ¾Ë¾Æº¸ÀÚ. À̹ø¿¡´Â °á°úÈ­¸éÀ» ¸ÕÀú ¼Ò°³ÇÑ´Ù. 


 
 

 À§ ±×¸² 3-11 Àº ºê¶ó¿ìÀú¿¡¼­ First name, Middle name, Birthday ¸¦ ÀÔ·ÂÇÑ ÈÄ Send parameters using GET ¹öư ȤÀº Send parameters using POST ¹öưÀ» ´­·¶À» ¶§ÀÇ °á°ú°¡ ¹Ù·Î ¾Æ·¡ ºÎºÐ¿¡ Ç¥½ÃµÇ´Â ÇüÅÂÀÇ ´Ü¼øÇÑ ¿¹Á¦ÀÌ´Ù. À§ »ùÇÃÀ» ½ÇÇà½ÃÄÑ º¸±â À§Çؼ­´Â getAndPostExample.html °ú ¼­¹ö ÇÁ·Î±×·¥ÀÎ GetAndPostExample.java °¡ ÇÊ¿äÇÏ´Ù. ÇÏÁö¸¸ À̹ø ¿¹Á¦ÀÇ ÁÖ¿ä ÇÙ½ÉÀº ¼­¹ö ÇÁ·Î±×·¥ÀÌ ¾Æ´Ï´Ù. XHR °´Ã¼°¡ GET/POST ¹æ½ÄÀ» ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö¸¦ ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù. Ŭ¶óÀÌ¾ðÆ® ¹× ¼­¹ö ÇÁ·Î±×·¥ Äڵ带 ±â¼úÇÑ ÈÄ XHR ÀÇ ÁÖ¿äÄڵ忡 ´ëÇØ¼­ ¼³¸íÀ» ÇϰڴÙ.

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

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sending Request Data Using GET and POST</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 createQueryString() {
var firstName = document.getElementById("firstName").value;
var middleName = document.getElementById("middleName").value;
var birthday = document.getElementById("birthday").value;

var queryString = "firstName=" + firstName + "&middleName=" + middleName
+ "&birthday=" + birthday;

return queryString;
}

function doRequestUsingGET() {
createXMLHttpRequest();

var queryString = "example5.php?";
queryString = queryString + createQueryString()
+ "&timeStamp=" + new Date().getTime();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", queryString, true);
xmlHttp.send(null);
}

function doRequestUsingPOST() {
createXMLHttpRequest();

var url = "example5.php?timeStamp=" + new Date().getTime();
var queryString = createQueryString();

xmlHttp.open("POST", url, true);
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(queryString);
}

function handleStateChange() {
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
parseResults();
}
}
}

function parseResults() {
var responseDiv = document.getElementById("serverResponse");
if(responseDiv.hasChildNodes()) {
responseDiv.removeChild(responseDiv.childNodes[0]);
}

var responseText = document.createTextNode(xmlHttp.responseText);
responseDiv.appendChild(responseText);
}

</script>
</head>

<body>
<h1>Enter your first name, middle name, and birthday:</h1>

<table>
<tbody>
<tr>
<td>First name:</td>
<td><input type="text" id="firstName"/>
</tr>
<tr>
<td>Middle name:</td>
<td><input type="text" id="middleName"/>
</tr>
<tr>
<td>Birthday:</td>
<td><input type="text" id="birthday"/>
</tr>
</tbody>

</table>

<form action="#">
<input name="button" type="button" onClick="doRequestUsingGET();" value="Send parameters using GET"/>
<br/>
<br/>
<input type="button" value="Send parameters using POST" onClick="doRequestUsingPOST();"/>
</form>

<br/>
<h2>Server Response:</h2>

<div id="serverResponse"></div>

</body>
</html>


<3-12  example5.html ÀÇ Àüü ¼Ò½º ÄÚµå>   


<?
$responseText = "Hello ".$firstName." ".$middleName.". Your birthday is ".$birthday;
echo $responseText;
?>

<3-13 example5.php ÀÇ Àüü ¼Ò½º ÄÚµå> 

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

3-12 ÀÇ »ùÇà ÄÚµå´Â ÀÌÀü ¿¹Á¦¿Í ºñ±³ÇØ ºÃÀ»¶§ Å©°Ô ¾î·Á¿î ºÎºÐÀº ¾øÀ» °ÍÀÌ´Ù. 3-13 ÀÇ ÇÁ·Î±×·¥Àº ´Ü¼øÇÑ ¿¡ÄÚ¼º ¹®ÀÚ¿­À» »ý¼ºÇؼ­ ´Ù½Ã Ŭ¶óÀÌ¾ðÆ®·Î º¸³»´Â °ÍÀ̹ǷΠƯº°ÇÑ ¼³¸íÀº ÇÊ¿äÇÏÁö ¾ÊÀ» µí ½Í´Ù. À̹ø ¿¹Á¦ÀÇ ÇÙ½ÉÀº ajax ¿¡¼­ GET ¹× POST ¹æ½ÄÀ¸·Î ¼­¹ö¿¡ ÆÄ¶ó¹ÌÅ͸¦ º¸³»´Â ¹æ¹ýÀÌ´Ù.

 

function createQueryString() {
    var firstName = document.getElementById("firstName").value;
    var middleName = document.getElementById("middleName").value;
    var birthday = document.getElementById("birthday").value;
   
    var queryString = "firstName=" + firstName + "&middleName=" + middleName
        + "&birthday=" + birthday;
   
    return queryString;
}

 

¸ÕÀú À§ ÄÚµå´Â GET ¹× POST ¹æ½Ä¿¡ À־ Äõ¸® ½ºÆ®¸µÀ» ¸¸µé¾î °øÅëÀ¸·Î »ç¿ëÇϱâ À§ÇÑ ¸Þ¼ÒµåÀÌ´Ù. Àü¿¡µµ ¼³¸íÇßµíÀÌ name=value ½ÖÀÇ ÆÄ¶ó¹ÌÅ͸¦ ÇÑÁÙÀÇ String µ¥ÀÌÅÍ·Î ¸¸µé°í ÀÖ´Ù. °¢ name=value ½ÖÀº & ·Î ±¸ºÐÁö¾î¾ß ÇÑ´Ù. name=value ½ÖÀÇ ¼ø¼­´Â »ó°ü¾ø´Ù.

 

function doRequestUsingGET() {
    createXMLHttpRequest();
   
    var queryString = "GetAndPostExample?";
    queryString = queryString + createQueryString()
        + "&timeStamp=" + new Date().getTime();
    xmlHttp.onreadystatechange = handleStateChange;
    xmlHttp.open("GET", queryString, true);
    xmlHttp.send(null);
}

 

Äõ¸® ½ºÆ®¸µÀ» ¸¸µé¶§ "&timeStamp=" + new Date().getTime(); ºÎºÐÀ» ³ÖÀº ÀÌÀ¯´Â ´ÙÀ½°ú °°´Ù. ¸î¸î ºê¶ó¿ìÀúµéÀº ¸íÈ®ÇÏÁö ¾ÊÀº Á¶°ÇÇÏ¿¡¼­ ¶È°°Àº url ·Î XHR ¸ÖƼ ¿äûÀ» º¸³ÂÀ»¶§ ¼­¹öÀÇ °á°ú¸¦ ij½ÌÇÏ´Â °æÇâÀ» º¸ÀδÙ. ºñ·Ï °°Àº url ÀÌÁö¸¸ ÀÀ´äÀÌ ´Ù¸¦°æ¿ì¿£ ij½ÌÇÏ´Â °æÇâÀÌ ¿ÀÈ÷·Á ¿¹»óÄ¡ ¸øÇÑ °á°úÀÇ ¿øÀÎÀÌ µÉ ¼öµµ Àֱ⶧¹®¿¡ µÇµµ·ÏÀ̸é unique ÇÑ urlÀ» »ý¼ºÇϱâ À§ÇÑ ¹æ¹ýÀ» ÅÃÇѰÍÀÌ´Ù. ÀÌ·¸°Ô »ý¼ºÇÑ Äõ¸® ½ºÆ®¸µÀ» open ¸Þ¼Òµå¿¡ ³Ö¾îÁÖ°í send ¸Þ¼Òµå¿¡´Â null °ªÀ» ¼³Á¤ÇÑ´Ù. ´ÙÀ½Àº POST ¹æ½Ä¿¡ ´ëÇØ¼­ »ìÆìº¸ÀÚ.

 

function doRequestUsingPOST() {
    createXMLHttpRequest();
   
    var url = "GetAndPostExample?timeStamp=" + new Date().getTime();
    var queryString = createQueryString();
   
    xmlHttp.open("POST", url, true);
    xmlHttp.onreadystatechange = handleStateChange;
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");   
    xmlHttp.send(queryString);
}

 

POST ¹æ½Äµµ GET ¹æ½Ä°ú ¸¶Âù°¡Áö·Î °°Àº Äõ¸® ½ºÆ®¸µÀ» »ç¿ëÇÑ´Ù. ÇÏÁö¸¸ ¿ëµµ´Â ´Ù¸£´Ù. GET ¹æ½ÄÀº url °ú Äõ¸® ½ºÆ®¸µÀ» ÇÕÃļ­ open ¸Þ¼Òµå¿¡ ³Ö¾î¼­ »ç¿ëÇÑ ¹Ý¸é, POST ¹æ½ÄÀº À§ ÄÚµåó·³ send ¸Þ¼Òµå¿¡ ÆÄ¶ó¹ÌÅÍ·Î ³Ö¾îÁØ´Ù. ¶Ç ´Ù¸¥ Â÷ÀÌÁ¡À̶ó¸é POST ¹æ½ÄÀº HTTP Request °´Ã¼ÀÇ ¹Ùµð¿¡ ÆÄ¶ó¹ÌÅͰ¡ ÀúÀåµÇ´Â °ÍÀ̹ǷΠÇì´õ¿¡µµ Content-Type À» ¹Ýµå½Ã Á¤ÀÇÇØ Áà¾ß ÇÑ´Ù. Á¤ÀǸ¦ ÇØÁÖÁö ¾ÊÀ¸¸é ¼­¹ö¿¡¼­´Â Ŭ¶óÀÌ¾ðÆ®¿¡¼­ º¸³½ ÆÄ¶ó¹ÌÅ͸¦ ¾òÁö ¸øÇÑ´Ù.

 

 

 

 

3.5 XML À» ¿äû ÆÄ¶ó¹ÌÅÍ·Î »ç¿ëÇϱâ

 

¿¹Á¦ 3-13Àº ajax¸¦ ÀÌ¿ëÇÏ¿© ºê¶ó¿ìÀúÀÇ ÆÄ¶ó¹ÌÅ͸¦ ¼­¹ö·Î Àü¼ÛÇÏ°í ±× °á°ú¸¦ Ã³¸®ÇÏ´Â ºÎºÐÀ» ÁÖ·Î »ìÆìº¸¾Ò´Ù. ÇÏÁö¸¸ ÆÄ¶ó¹ÌÅ͸¦ name=value ½ÖÀ¸·Î º¸³»´Â °ÍÀº Ãʺ¸³ª ÇÏ´Â ÁþÀ¸·Î º¸ÀÏ ¼ö ÀÖ°í Á»´õ È®Á¤¼º°ú À¯¿¬¼º ±×¸®°í °¡µ¶¼ºÀ» ³ôÀÌ´Â ¹æÇâÀ¸·Î ³ë·ÂÀ» ÇØº¸ÀÚ. ÆÄ¶ó¹ÌÅ͸¦ xml ·Î º¯È¯Çؼ­ ó¸®Çϵµ·Ï ÇÏ´Â °ÍÀÌ´Ù. Èï¹ÌÁøÁøÇÏÁö ¾ÊÀº°¡? ±×·¸´Ù°í ÀÌ ¹æ½ÄÀÌ ¿Ïº®ÇÑ ÇØ°áÃ¥ÀÌ µÇ´Â °ÍÀº ¾Æ´Ï´Ù. À̹ø ¿¹Á¦µµ ¹°·Ð ½ÇÇèÀûÀÌ°í ±âÃÊÀûÀÎ Äڵ带 °¡Áö°í ±× Ȱ¿ëµµ¸¦ ¸ð»öÇÒ °ÍÀÌ´Ù.

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

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sending an XML Request</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 createXML() {
var xml = "<pets>";

var options = document.getElementById("petTypes").childNodes;
var option = null;
for(var i = 0; i < options.length; i++) {
option = options[i];
if(option.selected) {
xml = xml + "<type>" + option.value + "<\/type>";
}
}

xml = xml + "<\/pets>";
return xml;
}

function sendPetTypes() {
createXMLHttpRequest();

var xml = createXML();
var url = "example6.php?timeStamp=" + new Date().getTime();

xmlHttp.open("POST", url, true);
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(xml);
}

function handleStateChange() {
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
parseResults();
}
}
}

function parseResults() {
var responseDiv = document.getElementById("serverResponse");
if(responseDiv.hasChildNodes()) {
responseDiv.removeChild(responseDiv.childNodes[0]);
}

var responseText = document.createTextNode(xmlHttp.responseText);
responseDiv.appendChild(responseText);
}

</script>
</head>

<body>
<h1>Select the types of pets in your home:</h1>

<form action="#">
<select id="petTypes" size="6" multiple="true">
<option value="cats">Cats</option>
<option value="dogs">Dogs</option>
<option value="fish">Fish</option>
<option value="birds">Birds</option>
<option value="hamsters">Hamsters</option>
<option value="rabbits">Rabbits</option>
</select>

<br/><br/>
<input type="button" value="Submit Pets" onclick="sendPetTypes();"/>
</form>

<h2>Server Response:</h2>

<div id="serverResponse"></div>

</body>
</html>


<3-14 example6.html ÀÇ Àüü ¼Ò½º ÄÚµå>

 

<?
// À̱¸¹®ÀÌ Àû¿ëµÇ±â À§Çؼ­´Â php.ini ¿¡¼­ always_populate_raw_post_data On À¸·Î ¼³Á¤µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù.
$xml = $HTTP_RAW_POST_DATA;
$type = null;

$responseText = "Selected Pets: ";
$parser = xml_parser_create();
xml_parse_into_struct($parser, $xml, $values, $index);
xml_parser_free($parser);

foreach($index["TYPE"] as $key => $value){
$responseText .= " ".$values[$value]["value"];
}
echo $responseText;
?>

 

<3-15 example6.php ÀÇ Àüü ¼Ò½º ÄÚµå>

 

3-14´Â ¿ÏÀü html ³¯ÄÚµùÀ̶ó ½Ç¸ÁÇÒ ¼öµµ ÀÖ°Ú´Ù. ÆÄ¶ó¹ÌÅ͸¦ ´ã°í ÀÖ´Â xml À» ½ºÆ®¸µ Á¶ÇÕÀ¸·Î »ý¼ºÇؼ­ ¼­¹ö·Î Àü¼ÛÇÑ´Ù. Àü¼Û¹æ½ÄÀº »ùÇà 3-12 ÀÇ POST ¹æ½Ä°ú µ¿ÀÏÇÏ´Ù. 3-15 ´Â ¼­ºê¸´À¸·Î½á ºê¶ó¿ìÀú¿¡¼­ request °´Ã¼ÀÇ body ¿¡ ½Ç¾îº¸³½ xml À» ÆÄ½ÌÇØ¼­ µ¥ÀÌÅ͸¦ ÃßÃâÇÑ ÈÄ ÀÏÁ¤ÇÑ Çü½ÄÀÇ ¹®ÀÚ¿­·Î º¯È¯ÇÏ¿© ´Ù½Ã Ŭ¶óÀÌ¾ðÆ®·Î º¸³»ÁÖ´Â ¹æ½ÄÀÌ´Ù. À̹ø ¼­¹ö ÇÁ·Î±×·¥¿ª½Ã xml À» ÆÄ½ÌÇϰí Á¤º¸¸¦ ÃßÃâÇÏ´Â ºÎºÐ¿¡ ´ëÇØ¼­´Â Æ¯º°ÇÑ ¼³¸íÀ» ÇÏÁö´Â ¾Ê°Ú´Ù. ÇÏÁö¸¸ ¼­ºí¸´¿¡¼­ ÇѰ¡Áö ¤°í ³Ñ¾î°¡ÀÚ¸é Ŭ¶óÀÌ¾ðÆ®·ÎºÎÅÍ ¹ÞÀº xML À» ÆÄ½ÌÇÒ¶§ Document ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇϴµ¥, ÀÌ ´Â W3C °¡ ±¸Ã¼È­ÇÑ °ÍÀ¸·Î DOM °´Ã¼¿¡ Á¸ÀçÇÏ´Â °°Àº ±â´ÉÀÇ ¸Þ¼ÒµåÀÎ getElementsByTagName("type") À» »ç¿ëÇϰí ÀÖ´Ù´Â Á¡ÀÌ´Ù. ³ªÀÇ ÁÖ¿ä ³íÁ¡Àº ¾îµð±îÁö³ª Ŭ¶óÀ̾ðÆ®ÀÌ´Ù. ÇÙ½É ÄÚµå´Â ¾Æ·¡¿Í °°´Ù.

 

function createXML() {
    var xml = "<pets>";
   
    var options = document.getElementById("petTypes").childNodes;
    var option = null;
    for(var i = 0; i < options.length; i++) {
        option = options[i];
        if(option.selected) {
            xml = xml + "<type>" + option.value + "<\/type>";
        }
    }
   
    xml = xml + "<\/pets>";
    return xml;
}

 

ÇÙ½É ·ÎÁ÷ÀÌÁö¸¸ ³Ê¹« °£´ÜÇØ¼­ ¼³¸íÇÒ °Íµµ ¾øÀ» °Í °°´Ù. À§ ºÎºÐÀº xmlÀ» String Çü½ÄÀÇ Äõ¸® ½ºÆ¼¸µÀ» »ý¼ºÇÏ´Â ºÎºÐÀÌ´Ù. petTypes ´Â select box ¿¡¼­ option ¿¤¸®¸ÕÆ® °ªÀ» ÃßÃâÇÏ¿© ¹®ÀÚ¿­À» ¸¸µå´Â ºÎºÐÀÌ´Ù.

 

function sendPetTypes() {
    createXMLHttpRequest();
   
    var xml = createXML();
    var url = "PostingXMLExample?timeStamp=" + new Date().getTime();
   
    xmlHttp.open("POST", url, true);
    xmlHttp.onreadystatechange = handleStateChange;
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");   
    xmlHttp.send(xml);
}

 

À§ ÄÚµå ¿ª½Ã ÀÌÀü »ùÇÿ¡¼­ ´Ù·ç¾ú±â ¶§¹®¿¡ Ưº°ÇÏ°Ô ¼³¸íÇÑ ºÎºÐÀº ¾ø´Ù. ÇÏÁö¸¸ ÇѰ¡Áö ¤°í ³Ñ¾î°¥ ºÎºÐÀÌ Àִµ¥, send() ¸Þ¼ÒµåÀÇ ÆÄ¶ó¹ÌÅÍ¿¡´Â ¹®ÀÚ¿­ ¹× DOM °´Ã¼¸¦ ¼³Á¤ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÇÏÁö¸¸ ¿Ö À̹ø ¿¹Á¦¿¡¼­´Â DOM °´Ã¼ ´ë½Å¿¡ ¹®ÀÚ¿­À» ³Ö¾úÀ»±î? ¾Æ½±°Ôµµ Áö±Ý±îÁö ºê¶ó¿ìÀú°£ DOM °´Ã¼¸¦ »ý¼ºÇؼ­ °øÅëÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾ø±â ¶§¹®ÀÌ´Ù. IE ÀÇ °æ¿ì´Â ActiveXObject ÄÁÆ®·ÑÀ» ÅëÇØ¼­, ¸ðÁú¶ó´Â native ÀÚ¹Ù½º¸³Æ®¸¦ ÅëÇØ¼­ Á¦°øÇϸç, ½ÉÁö¾î ÀÌ·± ¹æ¹ýÁ¶Â÷ Áö¿øÇÏÁö ¾Ê´Â ºê¶ó¿ìÀúµµ Á¸ÀçÇÑ´Ù. µû¶ó¼­ ¾î¿¼ö ¾øÀÌ ½ºÆ®¸µ°ªÀ» ¼³Á¤ÇÑ °ÍÀÌ´Ù.

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

 


 

 

 

 

3.6 JSON À» Ȱ¿ëÇÏ¿© µ¥ÀÌÅ͸¦ ¼­¹ö·Î º¸³»±â

 

¹Ù·Î ÀÌÀüÀÇ 3-14 »ùÇÃÀº ºê¶ó¿ìÀúÀÇ ÆÄ¶ó¹ÌÅ͸¦ XML Çü½ÄÀ¸·Î º¯È¯ÇÏ¿© ¼­¹ö·Î º¸³»´Â ¹æ¹ýÀ» Á¦½ÃÇß¾ú´Ù. µ¥ÀÌŸ Æ÷¸ËÀÇ Ç¥ÁØÀÌ µÇ¼­¹ö¸° XMLÀ» ÀÌ¿ëÇÑ´Ù´Â ÀüüÀûÀÎ ¸Æ¶ôÀº ±×·²½ÎÇßÁö¸¸ »ç½Ç XMLÀ» ¸¸µå´Â °úÁ¤ÀÌ º¹ÀâÇÑ Äõ¸® ½ºÆ®¸µ Á¶ÇÕÀÛ¾÷À̶ó¸é ´©°¡ ÇÏ·ÁÇϰڴ°¡ ¸»ÀÌ´Ù. ³ª Àڽŵµ ÀÌ·± ÀÛ¾÷Àº Á¤¸» ½È¾îÇÑ´Ù.

 

XML À» »ý¼ºÇϱâ À§ÇÑ javascript ³¯ÄÚµùÀÇ ´ë¾ÈÀ¸·Î JSON(Javascript Object Notation, www.json.org) À» ¼Ò°³ÇÑ´Ù. JSON Àº ÅØ½ºÆ® Æ÷¸Ë±â¹ÝÀÇ °æ·® µ¥ÀÌÅÍ º¯È¯ Æ÷¸ËÀÌ´Ù. ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡ µ¶¸³Àû¸ç, C ¾ð¾î°è¿­¿¡ Àͼ÷ÇÑ µ¥ÀÌÅÍ ±¸Á¶ Çü½ÄÀ» ÃëÇϰí ÀÖ´Ù. JSONÀº µÎ°¡Áö ÅØ½ºÆ® Æ÷¸ËÀ» °¡Áö°í Àִµ¥, ù¹øÂ°´Â name/value ½ÖÀÇ Ä÷º¼Ç µ¥ÀÌÅÍ ±¸Á¶·Î ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î µûÁö¸é object, record, struct Âë µÇ°Ú´Ù. µÎ¹øÂ°´Â Á¤·ÄµÈ value ÀÇ ¸®½ºÆ®ÇüÅ·νá ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î ºñÀ¯ÇÏÀÚ¸é ¹è¿­À̶ó°í º¸¸é µÉ °ÍÀÌ´Ù.

 

JSON ÀÇ µ¥ÀÌÅÍ ±¸Á¶´Â ¸¹Àº ÇÁ·Î±×·¥ ¾ð¾î¿¡ ÀÇÇØ¼­ Áö¿øµÇ°í Àֱ⶧¹®¿¡ XML º¸´Ù´Â À̱âÁ¾ ½Ã½ºÅÛ°£ÀÇ ÀÌ»óÀûÀÎ ¼±ÅÃÀÌ µÉ °ÍÀÌ´Ù. Ãß°¡ÀûÀ¸·Î JSON Àº Ç¥ÁØ ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ ºÎ·ùÀ̹ǷΠ¸ðµç À¥ ºê¶ó¿ìÀú°£¿¡µµ ¾ç¸³ÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù.

Ãâó : www.json.org

 
Object´Â {} À¸·Î Ç¥½ÃÇÑ´Ù. ¿ÀºêÁ§Æ®¿¡´Â name/value ½ÖÀÌ ÄÝ·Ð(:)  È¤Àº ÄÞ¸¶(,) ·Î ±¸ºÐµÇ¾îÁ® ÀÖÀ¸¸ç ¼ø¼­´Â ¾ø´Ù. Array ´Â [] À¸·Î Ç¥½ÃÇÑ´Ù. ¹è¿­Àº Á¤·ÄµÈ value °¡ ÄÞ¸¶(,) ¿¡ ÀÇÇØ¼­ ±¸ºÐµÇ¾îÁ® ÀÖÀ¸¸ç, value °ªÀº ½ºÆ®¸µ("" À¸·Î µÑ·¯½Î¾ß ÇÔ), ¼ýÀÚ, true or false, null, object , array °¡ ¿Ã¼ö ÀÖÀ¸¹Ç·Î ¹è¿­ÀÇ ±¸Á¶´Â °èÃþÀûÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù.½ºÆ®¸µÀº À¯´ÏÄÚµå Á¶ÇÕ ¹× ¹é·¡½¬ À̽ºÄÉÀÌÇÁ(\)¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç '' À» »ç¿ëÇÏ¿© character ¸¦ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ½ºÆ®¸µ°ú ¼ýÀڴ C¾ð¾î ȤÀº ÀÚ¹ÙÀÇ ½ºÆ®¸µ°ú °ÅÀÇ Èí»çÇÏÁö¸¸ 8Áø¼ö ¹× 16Áø¼ö Æ÷¸ËÀº Áö¿øÇÏÁö ¾Ê´Â´Ù. °ø¹éÀ» name/value ½Ö »çÀÌ»çÀÌ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇϳªÀÇ ¿¹¸¦ µé¾îº¸ÀÚ. Employ ¶ó´Â Ŭ·¡½º(¸â¹ö·Î firstName, lastName, employeeNumber, title)ÀÇ ÀνºÅϽº¸¦ JSON À» ÀÌ¿ëÇØ¼­ ¾Æ·¡¿Í °°ÀÌ Ç¥ÇöÇØ º¼ ¼ö ÀÖ´Ù. var employee = {
 "firstName"    : John,
 "lastName"     : Doe,
 "employNumber" : 123,
 "title"        : "Manager"
} ±×·¯¸é À§ Ç¥ÇöÀ» ¿ÀºêÁ§Æ® ¼Ó¼ºÀ» ÀÌ¿ëÇØ¼­ ¾Æ·¡¿Í °°ÀÌ ´Ù·ê ¼ö ÀÖ´Ù.var lastName = employee.lastName;//lastName ¿¡ Á¢±Ùvar title = employee.title;//title ¿¡ Á¢±Ùemployee.emplyeeNumber = 456;//employeeNumber ¸¦ 456 À¸·Î ¼öÁ¤ 

JSON ÀÇ ÀÎÄÚµùÀº È®½ÇÈ÷ XML ÀÎÄÚµùº¸´Ù °¡º±´Ù. µû¶ó¼­ ³×Æ®¿÷À» ÅëÇØ¼­ Å« µ¥ÀÌÅͰ¡ ¿À°í°¡´Â »óȲ¿¡¼­´Â ¸¹Àº ÆÛÆ÷¸Õ½ºÀÇ Â÷À̰¡ ¹ß»ýÇÒ °ÍÀÌ´Ù. JSON ½ÎÀÌÆ®¿¡ °¡º¸¸é Àû¾îµµ 14°³ ÀÌ»óÀÇ ¼­¹öÂÊ ¾îÇø®ÄÉÀ̼ÇÀ» ´Ù·ç´Â ÇÁ·Î±×·¡¹Ö¾ð¾î¿¡¼­ JSON À» »ç¿ëÇÒ ¼ö ÀÖ°Ô²û Áغñ°¡ µÇ¾î ÀÖ´Ù.

 

ÀÌÁ¦ 3ÀåÀÇ ¸¶Áö¸· ÁÖÁ¦ÀΠJSON À» ÀÌ¿ëÇÑ °£´ÜÇÑ »ùÇÃÀ» »ìÆìº¸ÀÚ.

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

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

<script type="text/javascript" src="example7.js"></script>
<script type="text/javascript">

var xmlHttp;

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

function doJSON() {
var car = getCarObject();

//Use the JSON JavaScript library to stringify the Car object
var carAsJSON = JSON.stringify(car);
alert("Car object as JSON:\n " + carAsJSON);

var url = "example7.php?timeStamp=" + new Date().getTime();

createXMLHttpRequest();
xmlHttp.open("POST", url, true);
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(carAsJSON);
}

function handleStateChange() {
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
parseResults();
}
}
}

function parseResults() {
var responseDiv = document.getElementById("serverResponse");
if(responseDiv.hasChildNodes()) {
responseDiv.removeChild(responseDiv.childNodes[0]);
}

var responseText = document.createTextNode(xmlHttp.responseText);
responseDiv.appendChild(responseText);
}

function getCarObject() {
return new Car("Dodge", "Coronet R/T", 1968, "yellow");
}

function Car(make, model, year, color) {
this.make = make;
this.model = model;
this.year = year;
this.color = color;
}

</script>
</head>

<body>

<br/><br/>
<form action="#">
<input type="button" value="Click here to send JSON data to the server"
onclick="doJSON();"/>
</form>

<h2>Server Response:</h2>

<div id="serverResponse"></div>

</body>
</html>


<3-18 example7.htm ÀÇ Àüü ¼Ò½º ÄÚµå>

 

package ajaxbook.chap3;

import java.io.*;
import java.net.*;
import java.text.ParseException;
import javax.servlet.*;
import javax.servlet.http.*;
import org.json.JSONObject;

public class JSONExample extends HttpServlet {

    /**
  *
  */
 private static final long serialVersionUID = 1L;

 protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        String json = readJSONStringFromRequestBody(request);

        //Use the JSON-Java binding library to create a JSON object in Java
        JSONObject jsonObject = null;
        try {
            jsonObject = new JSONObject(json);
        }
        catch(ParseException pe) {
            System.out.println("ParseException: " + pe.toString());
        }

        String responseText = "You have a " + jsonObject.getInt("year") + " "
            + jsonObject.getString("make") + " " + jsonObject.getString("model")
            + " " + " that is " + jsonObject.getString("color") + " in color.";

        response.setContentType("text/xml");
        response.getWriter().print(responseText);
    }

    private String readJSONStringFromRequestBody(HttpServletRequest request){
        StringBuffer json = new StringBuffer();
        String line = null;
        try {
            BufferedReader reader = request.getReader();
            while((line = reader.readLine()) != null) {
                json.append(line);
            }
        }
        catch(Exception e) {
            System.out.println("Error reading JSON string: " + e.toString());
        }
        return json.toString();
    }
}

<3-19 JSONExample.java ÀÇ Àüü ¼Ò½º ÄÚµå>

 

¸¶Áö¸· ¿¹Á¦¿¡¼­ Áß¿äÇÑ ºÎºÐÀ» ±½°Ô Ç¥½ÃÇÏ¿´´Ù. À̹ø ¿¹Á¦¸¦ ½ÇÇàÇØ º¸±â À§Çؼ­´Â json.js ¿Í ÀÚ¹Ù°ü·Ã json ¶óÀ̺귯¸®°¡ ÇÊ¿äÇÏ´Ù. °ü·Ã ÆÄÀϵéÀº json À¥½ÎÀÌÆ®¿¡¼­ ´Ù¿î¹ÞÀ¸¸é µÈ´Ù. ¿ì¼± ÀÚ¹Ù½ºÅ©¸³Æ®ÂÊ ÇÙ½ÉÄڵ带 ¸ÕÀú »ìÆìº¸ÀÚ.

 

function getCarObject() {
    return new Car("Dodge", "Coronet R/T", 1968, "yellow");
}

function Car(make, model, year, color) {
    this.make = make;
    this.model = model;
    this.year = year;
    this.color = color;
}

 

À§ ÄÚµå´Â ¼³¸íÀÌ º°·Î ÇÊ¿äÄ¡ ¾ÊÀ» °Í °°´Ù. Car °´Ã¼¸¦ ¸¸µé¾î ÁÖ´Â ¸Þ¼ÒµåÀÌ´Ù.

 

function doJSON() {
    var car = getCarObject();
   
    //Use the JSON JavaScript library to stringify the Car object
    var carAsJSON = JSON.stringify(car);
    alert("Car object as JSON:\n " + carAsJSON);
   
    var url = "JSONExample?timeStamp=" + new Date().getTime();
   
    createXMLHttpRequest();
    xmlHttp.open("POST", url, true);
    xmlHttp.onreadystatechange = handleStateChange;
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");   
    xmlHttp.send(carAsJSON);
}

À§ Äڵ带 º¸¸é ÀÚ¹Ù½ºÅ©¸³Æ® car °´Ã¼¸¦ »ý¼ºÇÑ ÈÄ JSON ÀÚ¹Ù½ºÅ©¸³Æ® ¶óÀ̺귯ÀÌÀÇ stringify ¸¦ »ç¿ëÇØ¼­ JSON °´Ã¼·Î º¯È¯Çϰí ÀÖ´Ù. ³ª¸ÓÁö ·ÎÁ÷Àº POST ¹æ½ÄÀ» ±¸ÇöÇÑ °ÍÀ̰í send(() ¸Þ¼Òµå¿¡ JSON °´Ã¼¸¦ ³Ö¾îÁØ´Ù.

 

À̹ø¿£ ¼­¹öÂÊ ÇÁ·Î±×·¥À» È®ÀÎÇØ º¸ÀÚ.

 

JSONObject jsonObject = null;
try {
    jsonObject = new JSONObject(json);
}
catch(ParseException pe) {
    System.out.println("ParseException: " + pe.toString());
}

String responseText = "You have a " + jsonObject.getInt("year") + " "
 + jsonObject.getString("make") + " " + jsonObject.getString("model")
 + " " + " that is " + jsonObject.getString("color") + " in color.";

 

¿ì¼± ¼­¹ö ÇÁ·Î±×·¥Àº Http request °´Ã¼¿¡¼­ JSON ¹®ÀÚ¿­À» ÃßÃâÇÑ´Ù. ÀÌ·¸°Ô ÃßÃâµÈ ¹®ÀÚ¿­À» JSON ÀÚ¹Ù ¶óÀ̺귯¸®ÀÇ JSONObject Ŭ·¡½º¸¦ »ý¼ºÇÒ¶§ »ý¼ºÀÚÀÇ ÆÄ¶ó¹ÌÅÍ·Î ÀԷµȴÙ. JSONObject ´Â ÀÚµ¿À¸·Î JSON ¹®ÀÚ¿­À» ÆÄ½ÌÇϰí getXxx ¸Þ¼Òµå¸¦ ÀÌ¿ëÇØ¼­ ¿©·¯ ŸÀÔÀÇ µ¥ÀÌÅ͸¦ ÃßÃâÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. Á¤¸» °£´ÜÇÏÁö ¾ÊÀº°¡?

 

´ÙÀ½Àº 3-19 »ùÇÃÀ» ½ÇÇàÇÑ °á°ú È­¸éÀÌ´Ù.

 

 
Click here to send JSON data to the server ¹öưÀ» Ŭ¸¯Çϸé alert âÀ¸·Î JSON object µ¥ÀÌÅÍ ±¸Á¶¸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù. ±×¸®°í ¼­¹ö¿¡¼­ ó¸®µÈ °á°ú¹®ÀÚ¿­ÀÎ You have a 1968 Dodge Coronet R/T that is yellow in color. À» È®ÀÎ ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.