|
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. À» È®ÀÎ ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. |