ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. xmlhttp.jsfunction paramEscape(paramValue) { return encodeURIComponent(paramValue); } function formData2QueryString(docForm) { var submitString = ''; var formElement = ''; var lastElementName = ''; for(i = 0 ; i < docForm.elements.length ; i++) { formElement = docForm.elements[i]; switch(formElement.type) { case 'text' : case 'select-one' : case 'hidden' : case 'password' : case 'textarea' : submitString += formElement.name + '=' + paramEscape(formElement.value) + '&'; break; case 'radio' : if(formElement.checked) { submitString += formElement.name + '=' + paramEscape(formElement.value) + '&'; } break; case 'checkbox' : if(formElement.checked) { if(formElement.name = lastElementName) { if(submitString.lastIndexOf('&') == submitString.length - 1) { submitString = submitString.substring(0, submitString.length - 1); } submitString += ',' + paramEscape(formElement.value); } else { submitString += formElement.name + '=' + paramEscape(formElement.value); } submitString += '&'; lastElementName = formElement.name; } break; } } submitString = submitString.substring(0, submitString.length - 1); //document.all("result").value = submitString; return submitString; } function xmlHttpPost(actionUrl, submitParameter, resultFunction) { var xmlHttpRequest = false; //IEÀΰæ¿ì if(window.ActiveXObject) { xmlHttpRequest = new ActiveXObject('Microsoft.XMLHTTP'); } else { xmlHttpReq = new XMLHttpRequest(); xmlHttpReq.overrideMimeType('text/xml'); } xmlHttpRequest.open('POST', actionUrl, true); xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlHttpRequest.onreadystatechange = function() { if(xmlHttpRequest.readyState == 4) { switch (xmlHttpRequest.status) { case 404: alert('¿À·ù: ' + actionUrl + 'ÀÌ Á¸ÀçÇÏÁö ¾ÊÀ½'); break; case 500: alert('¿À·ù: ' + xmlHttpRequest.responseText); break; default: eval(resultFunction + '(xmlHttpRequest.responseText);'); break; } } } xmlHttpRequest.send(submitParameter); }
ajax_search.html <HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html;" charset="euc-kr">
<SCRIPT type="text/javascript" src="http://jaso.co.kr/xmlhttp.js"></SCRIPT>
<SCRIPT Language="javascript">
<!--
function keywordKeyDown()
{
var keyCode = window.event.keyCode;
if(keyCode == 9) return; //Tab Ű
if(keyCode == 13) return; //Enter Ű
if(keyCode == 16) return; //Shift Ű
if(keyCode == 16) return; //Ctrl Ű
if(keyCode == 18) return; //Alt Ű
if(keyCode == 45) return; //Ins Ű
if(keyCode == 46) return; //Del Ű
if(keyCode == 33) return; //PgUp Ű
if(keyCode == 34) return; //PgDn Ű
if(keyCode == 35) return; //End Ű
if(keyCode == 36) return; //Home Ű
if(keyCode >= 37 && keyCode <= 40) return; //¹æÇâŰ
//Keydown À̺¥Æ® ¹ß»ý ½ÃÁ¡¿¡´Â ¾ÆÁ÷ TextField¿¡ »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ Å° °ªÀÌ ¼³Á¤µÇÁö ¾Ê¾Ò±â ¶§¹®¿¡
//ºê¶ó¿ìÀú°¡ À̺¥Æ®¿¡ ¹ÝÀÀÇÏ¿© °ªÀ» ¼³Á¤ÇÒ¶§ ±îÁö Àá½Ã ±â´Ù¸°´Ù.
setTimeout('submitSearchKeyword()', 250);
}
function submitSearchKeyword()
{
var url = 'http://jaso.co.kr/searchKeyword.jsp';
var queryString = formData2QueryString(document.MAIN_FORM);
var resultProcessMethod = 'viewSearchKeywordResult';
xmlHttpPost(url, queryString, resultProcessMethod);
}
function viewSearchKeywordResult(result)
{
if(result == "")
{
var searchKeywordDiv = document.all("searchKeyword");
searchKeywordDiv.innerHTML = "";
searchKeywordDiv.style.visibility = "hidden";
}
else
{
var resultList = result.split('|');
var viewResult = '';
for(i = 0 ; i < resultList.length; i++)
{
if(i == 0) viewResult += '<B>' + resultList[i] + '</B> <A href="javascript:hiddenSearchKeywordResult();">[´Ý±â]</A><BR>'
else viewResult += '<A href="javascript:setKeyword(\'' + resultList[i] + '\');">' + resultList[i] + '</A><BR>'
}
var searchKeywordDiv = document.all("searchKeyword");
searchKeywordDiv.innerHTML = viewResult;
searchKeywordDiv.style.visibility = "visible";
}
}
function hiddenSearchKeywordResult()
{
var searchKeywordDiv = document.all("searchKeyword");
searchKeywordDiv.innerHTML = "";
searchKeywordDiv.style.visibility = "hidden";
}
function setKeyword(selectedKeyword)
{
document.MAIN_FORM.keyword.value = selectedKeyword;
}
//-->
</SCRIPT>
<STYLE type="text/css">
<!--
.scroll_div { scrollbar-face-color:#FFFFFF;
scrollbar-highlight-color: #aaaaaa;
scrollbar-3dlight-color: #FFFFFF;
scrollbar-shadow-color: #aaaaaa;
scrollbar-darkshadow-color: #FFFFFF;
scrollbar-track-color: #FFFFFF;
scrollbar-arrow-color: #aaaaaa;}
-->
</STYLE>
</HEAD>
<BODY onLoad="MAIN_FORM.keyword.focus()">
<FORM name="MAIN_FORM">
"°¡", "°"À» ÀÔ·Â ÇØº¸¼¼¿ä.</BR>
<INPUT type="text" name="keyword" onkeydown="keywordKeyDown()" style:width=150px" autocomplete="off"><A href="javascript:alert('°Ë»öó¸®');">°Ë»ö</A>
<DIV id="searchKeyword" style="width:250px;height:100px;visibility:hidden;background-color:#D1EED2;overflow=auto;font-size:12px" class="scroll_div">
</DIV>
</FORM>
</BODY>
</HTML>
¼Ò½º¿¡´Â º¹ÀâÇÑ ³»¿ëÀº °ÅÀÇ ¾ø´Ù. °Ë»ö¾î ÀÔ·Â TextÀÇ Keydown À̺¥Æ®¿¡ ´ëÇÑ Ã³¸® ºÎºÐ°ú °á°ú¸¦ ¹Þ¾Æ ȸ鿡 ³ªÅ¸³»´Â ºÎºÐÀÌ ´ëºÎºÐÀÌ´Ù. AJAX·Î ¼¹ö¿¡ ´ëÇÑ ¿äûÀº ´ÙÀ½°ú °°Àº ¼ø¼·Î ó¸®ÇÑ´Ù.
1.XMLHttpRequest °´Ã¼ »ý¼º IEÀÇ °æ¿ì new ActiveXObject('Microsoft.XMLHTTP');¿Í °°ÀÌ »ý¼ºÇϰí IE°¡ ¾Æ´Ñ °æ¿ì new XMLHttpRequest(); ·Î »ý¼ºÇÑ´Ù.
2. XMLHttpRequest open open() ¸Þ¼Òµå¿¡´Â 3°³ÀÇ ÆÄ¶ó¹ÌÅͰ¡ Àִµ¥ ù¹øÂ°´Â È£Ãâ¹æ¹ýÀÎ GET, POST Áß¿¡ Çϳª°¡ ¿Â´Ù. ÇÊÀÚÀÇ °æ¿ì GET ¹æ½Äº¸´Ù´Â POST ¹æ½ÄÀ» ¼±È£Çϱ⠶§¹®¿¡ ´ëºÎºÐÀÇ Request´Â POST·Î Àü¼ÛÇϴµ¥ AJAX¿¡¼µµ ´ç¿¬È÷ POST¸¦ ¼±È£ÇÑ´Ù. µÎ¹øÂ° ÆÄ¶ó¹ÌÅʹ ó¸®ÇÏ´Â ¼¹öÀÇ URL Á¤º¸ÀÌ´Ù. ¼¼¹øÂ° ÆÄ¶ó¹ÌÅÍ´Â ºñµ¿±â/µ¿±â ¹æ½Ä¿¡ ´ëÇÑ ¼±ÅÃÀε¥ trueÀÎ °æ¿ì ºñµ¿±â ¹æ½ÄÀ¸·Î ó¸®ÇÑ´Ù. ºñµ¿±â ¹æ½ÄÀÇ °æ¿ì Request¸¦ Àü¼ÛÇÑ ´ÙÀ½ ¼¹ö·ÎºÎÅÍ ÀÀ´äÀÌ ¾ø´õ¶óµµ ºê¶ó¿ìÀú´Â °è¼ÓÇØ¼ ´Ù¸¥ 󸮸¦ ÇÒ ¼ö ÀÖ´Ù. »ç¿ëÀڷκÎÅÍ ÀÔ·ÂÀ» ¹Þ°Å³ª ´Ù¸¥ ½ºÅ©¸³Æ®¸¦ ¼öÇàÇÒ ¼öµµ ÀÖ´Ù. ¹Ý¸é µ¿±â¹æ½ÄÀº ¿äûÈÄ ¼¹ö·ÎºÎÅÍ °á°ú¸¦ ¹ÞÀ»¶§±îÁö ´Ù¸¥ 󸮴 ÇÒ ¼ö ¾øµµ·Ï ÇÏ´Â ¹æ½ÄÀÌ´Ù. °Ë»ö ÀÔ·Â ÇʵåÀÇ ¿¹Á¦¿¡¼¿Í °°Àº °æ¿ì´Â ºñµ¿±â ¹æ½ÄÀ¸·Î ó¸®ÇÏ´Â °ÍÀÌ º¸ÅëÀÌÁö¸¸ µ¥ÀÌÅÍÀÇ ¼öÁ¤, »èÁ¦, ÀԷ¿¡ ´ëÇÑ Ã³¸®ÀÇ °æ¿ì¿¡´Â 󸮰¡ ¿Ï·áµÇ¾ú´Ù´Â ¼¹ö·ÎºÎÅÍÀÇ ÀÀ´äÀ» ¹ÞÀº ÈÄ ´Ù¸¥ ¾×¼ÇÀ» ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÌ ÁÁ´Ù.
3.requestÀÇ content type ¼³Á¤ GET ¹æ½ÄÀÎ °æ¿ì ¼³Á¤ÇÒ Çʿ䰡 ¾øÁö¸¸ POST ¹æ½ÄÀÎ °æ¿ì¿¡´Â content typeÀ» ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÑ´Ù.
4.¼¹ö·ÎºÎÅÍ Ã³¸®°á°ú Àü¼Û ÈÄ ¼öÇàÇØ¾ß ÇÏ´Â ±â´É¿¡ ´ëÇÑ Á¤ÀÇ XMLHttpRequestÀÇ onreadystatechange ¼Ó¼ºÀº ¼¹ö·ÎºÎÅÍÀÇ Ã³¸® °á°ú¿¡ ´ëÇÑ »óÅÂÄڵ尡 º¯°æµÇ¾úÀ» ¶§ ¼öÇàÇØ¾ß ÇÏ´Â ½ºÅ©¸³Æ® functionÀ» ÁöÁ¤ÇÑ´Ù. ¿©±â¼´Â anonymous functionÀ» »ç¿ëÇÏ¿© Á÷Á¢ Á¤ÀÇ Çá¿´´Ù. xmlHttpRequest.onreadystatechange = function() {
if(xmlHttpRequest.readyState == 4)
}{
//¼¹ö·ÎºÎÅÍ ¹ÞÀº »óÅÂÄÚµå ¹× µ¥ÀÌÅ͸¦ ÀÌ¿ëÇÏ¿© 󸮷ÎÁ÷ ±¸Çö
}¹®ÀÚ¿ÀÎ °æ¿ì ¿©±â¼ÀÇ ¿¹Á¦¿Í °°ÀÌ Ã³¸®ÇÒ ¼ö ÀÖÁö¸¸ SOAP ÇÁ·ÎÅäÄÝ·Î Àü¼ÛµÈ XML µ¥ÀÌÅÍÀÎ °æ¿ì °¢°¢ÀÇ ºê¶ó¿ìÀú¿¡¼ Á¦°øÇÏ´Â XML ¶Ç´Â SOAPÀ» Áö¿øÇÑ °´Ã¼¸¦ ÀÌ¿ëÇÏ¿© ½±°Ô Çڵ鸵ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
5. 4¹ø±îÁöÀÇ ÀÛ¾÷À¸·Î Request°¡ Àü¼ÛµÇÁö ¾Ê´Â´Ù. Àü¼ÛÀ» À§ÇÑ Áغñ ÀÛ¾÷°ú 󸮰á°ú ¼ö½Å½Ã 󸮹æ¹ý¿¡ ´ëÇÑ Á¤ÀǸ¸ ÇÏ¿´À» »ÓÀÌ´Ù.
½ÇÁ¦ Request¸¦ Àü¼ÛÇϱâ À§Çؼ´Â send()¸¦ È£ÃâÇÏ¿© Àü¼ÛÇÑ´Ù.
searchKeyword.jspsend()ÀÇ ÆÄ¶ó¹ÌÅÍ´Â Àü¼ÛµÇ´Â RequestÀÇ ÆÄ¶ó¹ÌÅÍ °ªÀÌ´Ù. ¹°·Ð ¿©±â¼µµ ÀϹÝÀûÀÎ Request¿Í °°ÀÌ '&', '=' À¸·Î ±¸¼ºµÈ ¹®ÀÚ¿(¿¹: keyword=test&page=2 )À» ¸¸µé¾î¼ Àü¼ÛÇÏÁö¸¸, XML ÇüÅ·Π¸¸µé¾î¼ Àü¼ÛÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù xmlHttpRequest.send(submitParameter);
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import="java.util.*" %>
<%
HashMap keywordData = new HashMap();
keywordData.put("°¡", "°Å¸|°ÀÏ|°¡À»¼Ò³ªÅ¸|°ÁÖÈñ|°Àººñ|°·Â3¹Ý|°µ¿¿ø|°¡°Ýºñ±³|°¡¹æ|°¼öÁö");
keywordData.put("°", "°Å¸|°ÀÏ|°ÁÖÈñ|°Àººñ|°·Â3¹Ý|°µ¿¿ø|°¡¹æ|°¼öÁö");
request.setCharacterEncoding("UTF-8");
String keyword = request.getParameter("keyword");
//¿©±â¿¡¼ µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ ÇØ´ç keyword·Î ½ÃÀÛÇÏ´Â ´Ü¾î °Ë»ö
//¿¹Á¦¿¡¼´Â °£´ÜÇÏ°Ô Çϱâ À§ÇØ Hash¿¡¼ °¡Á®¿À´Â °ÍÀ¸·Î ó¸®
String result = (String)keywordData.get(keyword);
if(result == null) result = "Ű¿öµå ¾øÀ½";
out.print(keyword + " Ű¿öµå ¸ñ·Ï|" + result);
%>
AJAXÀÇ Request¿¡ ´ëÇØ ¼¹ö¿¡¼ÀÇ Ã³¸®´Â À§ÀÇ ¼Ò½º¿¡¼ º¸´Â °Í°ú °°ÀÌ ºñÁî´Ï½º ±â´É¿¡ ´ëÇÑ Ã³¸®(¿©±â¼´Â µ¥ÀÌÅÍÁ¶È¸)¿¡ ´ëÇØ¼´Â ±âÁ¸°ú µ¿ÀÏÇÏÁö¸¸ 󸮰á°ú¸¦ ºê¶ó¿ìÀú·Î Àü¼ÛÇÒ¶§ HTML ÇüŰ¡ ¾Æ´Ñ ¼ø¼öÇÑ µ¥ÀÌÅÍÇüŸ¸ Á¦°øÇÏ¿© Ŭ¶óÀÌ¾ðÆ®¿¡¼ ó¸®Çϵµ·Ï ÇÑ´Ù. ¿©±â¼´Â µ¥ÀÌÅÍÀÇ ±¸ºÐÀÚ¸¦ '|' ¹®ÀÚ·Î ±¸ºÐÇϵµ·Ï ó¸®ÇÏ¿´´Ù. µû¶ó¼ ¼¹ö¿¡¼ Request¸¦ ¹Þ¾Æ ó¸®ÇÒ ¶§¿¡´Â ó¸®ÇÒ ¶§¿¡¼ ¹Ýµå½Ã UTF-8·Î µðÄÚµùÇÏ¿© ó¸®ÇÏ¿©¾ß ÇÑ´Ù. ¿¹Á¦ÀÇ °æ¿ì searchKeyword.jsp¿¡¼ ´ÙÀ½°ú °°ÀÌ request¿¡ ´ëÇØ ó¸®Çϰí ÀÖ´Ù.
request.setCharacterEncoding("UTF-8");
Áö±Ý±îÁö AJAX¸¦ ÀÌ¿ëÇÏ¿© °£´ÜÇÑ ±â´ÉÀ» ±¸ÇöÇÔÀ¸·Î½á AJAX¿¡ ´ëÇØ¼ »ìÆìº¸¾Ò´Ù. ÇöÀç AJAXÀÇ À§Ä¡´Â À§ÀÇ ¿¹Á¦¿Í °°ÀÌ ¾ÖÇø®ÄÉÀ̼ÇÀÇ Æ¯Á¤ ºÎºÐ¿¡ ´ëÇØ¼¸¸ ÁÖ·Î »ç¿ëµÇ¾îÁö°í ÀÖ´Ù. ¾ØÅÍÇÁ¶óÀÌÁî ¾ÖÇø®ÄÉÀ̼ǿ¡¼ Àüü¸¦ AJAX ±â¹ÝÀ¸·Î ±¸ÇöÇϱ⿡´Â ¾ÆÁ÷±îÁö °æÇè°ú »ç·Ê°¡ ¸¹ÀÌ ºÎÁ·Çϰí AJAX°¡ Rich ClientÀÇ ÁÖ·ù·Î ÀÚ¸® ÀâÀ» °ÍÀÎÁö¿¡ ´ëÇØ¼´Â ¾ÆÁ÷±îÁö´Â ¹ÌÁö¼öÀÌ´Ù.
´ÜÁ¡ : º¹ÀâÇÑ HTML¿¡ ´ëÇÑ »ý¼ºÀ» ÀÚ¹Ù ½ºÅ©¸³Æ®¿Í °°Àº ½ºÅ©¸³Æ® ¾ð¾î·Î ó¸® (View¿¡ ´ëÇÑ Ã³¸®°¡ ±âÁ¸ÀÇ Servlet¿¡¼ ó·³ º¹ÀâÇÏ°Ô ±¸ÇöµÊ. ÇöÀç´Â JSP ¶Ç´Â StrutsÀÇ taglib¸¦ ÀÌ¿ëÇÏ¿© ½±°Ô ó¸®Çϰí ÀÖÁö¸¸ À̰ÍÀÌ ¾î·Æ´Ù.)
¿¬±¸ÇؾßÇÒ »çÇ× : ÀÌ·± ´ÜÁ¡À» ±Øº¹ÇÒ ¼ö ÀÖ´Â ½ºÅ©¸³Æ® 󸮿¡ ´ëÇÑ Ç¥ÁØ ¸¶·Ã ¹× ¼Ö·ç¼Ç echo2¿Í °°ÀÌ ÀÌ¹Ì ³ª¿Í ÀÖÁö¸¸ Á» ´õ ¸¹Àº ¿¬±¸ ¹× ·¹ÆÛ·±½ºÀÇ È®º¸°¡ ÇÊ¿äÇÏ´Ù°í ÇÒ ¼ö ÀÖ´Ù. ±×¸®°í Áö±Ý±îÁöÀÇ ¾ÆÅ°ÅØÃ³´Â ÇÁ¸®Á¨Å×ÀÌ¼Ç - ÄÁÆ®·Ñ - ºñÁî´Ï½º - µ¥ÀÌÅÍ¿Í °°Àº ÇüÅÂÀÇ ·¹ÀÌ¾î ±¸Á¶¸¸ ÀÖ¾úÁö¸¸ ÀÌÁ¦´Â ÇÁ¸®Á¨Å×ÀÌ¼Ç °èÃþÀ» Á» ´õ ¼¼ºÐÈÇÏ¿© ÇÁ¸®Á¨Å×ÀÌ¼Ç ³»ºÎ¿¡¼ÀÇ View(Dynamic È¸é ±¸¼º), ÄÁÆ®·Ñ(¿äû ¹× ÀÀ´ä¿¡ ´ëÇÑ Á¦¾î), µ¥ÀÌÅÍ(¼¹ö·ÎºÎÅÍ ¹ÞÀº ¶Ç´Â ¼¹ö·Î Àü¼ÛÇÒ)¿Í °°Àº ¼¼ºÎÀûÀÎ ¾ÆÅ°ÅØÃÄ¿¡ ´ëÇÑ ¿¬±¸µµ ÇÊ¿äÇÒ °Í °°´Ù.
Å×½ºÆ® ÆäÀÌÁö : ajax_search.html
¼Ò½º´Ù¿î·Îµå : source.zip
·¹ÆÛ·±½º http://www.onlamp.com/pub/a/onlamp/2005/05/19/xmlhttprequest.html http://developer.apple.com/internet/webcontent/xmlhttpreq.html http://www.onlamp.com/pub/a/onlamp/2005/05/19/xmlhttprequest.html http://www.state26.com/download/formdata2querystring.txt http://jania.pe.kr/wiki/jwiki/moin.cgi/JavaScriptTips }}} |
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|