Ajax
Ajax
AJAX๋, JavaScript์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ค ํ๋์ด๋ฉฐ Asynchronous Javascript And Xml(๋น๋๊ธฐ์ ์๋ฐ์คํฌ๋ฆฝํธ์ xml)์ ์ฝ์์ด๋ค.

์ด๋ฒคํธ ๋ฐ์์ ์๋ฒ์์ html+data๋ฅผ ๋ฆฌํดํ๋๊ฒ์ด ์๋๋ผ ๋ฐ์ดํฐ๋ง ๋ฆฌํดํ๋ ๋ฐฉ์์ด๋ค.
์ฆ ๋ฐ์ดํฐ๋ง์ ๋ฐ์์ค๋๋ฐ ์นํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ํ ํ์๊ฐ์๊ธฐ์ Ajax๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ์๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ง ๋ฐ์์ฌ ์ ์๋ค.
์ต๊ทผ์๋ xml๋ฐฉ์์ด์๋ JSON์ผ๋ก ํต์ผ๋์ด ์ฌ์ฉ๋๊ณ ์๋ค.
Ajax๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ Restful์ JSON์ ํตํด ๋ฐ์ดํฐ๋ง ์ฃผ๊ณ ๋ฐ๋ ๊ฐ๋ ์ผ๋ก ์ดํดํ๋ฉด ๋ ๊ฑฐ ๊ฐ๋ค.
๋น๋๊ธฐ ๋ฐฉ์
Ajax๋ ๋น๋๊ธฐ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์๋ค.
Thread์ ์๋ฆฌ๋ ๋น์ทํ๊ฒ ์๊ฐํ๋ฉด ๋ ๊ฑฐ ๊ฐ๋ค.
๋น๋๊ธฐ ๋ฐฉ์์ด๋?
- ์๋ฒ์ ์์ฒญ ํ ์๋ต์ด๋ ๊ฒฐ๊ณผ์ ์๊ด์์ด ๋์์ด ์ด๋ฃจ์ด์ง๋ ๋ฐฉ์์ด๋ค.
๋๊ธฐ ๋ฐฉ์์ด๋?
- ์๋ฒ์ ์์ฒญ ํ ์๋ต์ด๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ผ๋ง ๋์์ด ์ด๋ฃจ์ด์ง๋ ๋ฐฉ์์ด๋ค.

[์ถ์ฒ] surim014.log
Ajax ์ ์ฉ
Ajax๋ ๊ธฐ๋ณธ์ ์ผ๋ก XML HttpRequest , open , send , Call Back function ์์๋ก ์คํ๋๋ค.
jQuery ์ฌ์ฉ์ ๋ชจ๋ ๊ฒ ์บก์ํ๋์ด์์ด ์ฝ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค
- XML HttpRequest : Restful์ ํด๋ผ์ด์ธํธ ์์ฑ๊ณผ ๊ฐ์ด ๋ฆฌํ์คํธ๋ฅผ ์์ฑํ๋ค.
(CrossBrowser ๋ฌธ์ ) - open : request.open(โMETHOD(GET,POST)โ, url, [true,false]) / ์ ์ก๋ฐฉ์๊ณผ ๋ฃจํธ์ ๋๊ธฐ/๋น๋๊ธฐ ์ค์ ํ๋ค.
- POST๋ฐฉ์ ํด๋์ ๋ณด : request.setRequestHeader(โContent-Typeโ,
โapplication/x-www-form-urlencodedโ) - Call Back function : request.onreadystatechange = fucntion /๋ฐ์ดํฐ๊ฐ ์ ์ก ํ ์คํ์ํฌ ํจ์๋ฅผ ์ค์
- send : ๋ฆฌํ์คํธ๋ฅผ ๋ณด๋ธ๋ค. (ํ๋ผ๋ฏธํฐ๋ก ์ ๋ณด๋ฅผ ์ฃผ๋ฉด POST๋ฐฉ์์ Body์ ๋ด๊ฒจ ๋ณด๋ด์ง๋ค)

1. XML HttpRequest
๋ฆฌํ์คํธ๋ฅผ ๋ณด๋ด๋ Ajax๋ฆฌํ์คํธ๋ฅผ ์์ฑํ๋ค.
CrossBrowser์ ๋ฌธ์ ์ ์ ๊ฐ์ง๊ณ ์์ด jQuery์ฌ์ฉ์ ์บก์ ํํ์ฌ ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
<script>
var request = null;
// ๋ฆฌํ์คํธ ์์ฑ( ์ง์ํ๋ ๋ธ๋ผ์ฐ์ ธ ๋ฆฌํ์คํธ)
function createRequest(){
try {
request = new XMLHttpRequest();
//Debug..
//alert ("XMLHttpRequest() ๋ก request instancet์์ฑ์๋ฃ");
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
//Debug..
//alert ("ActiveXObject(Msxml2.XMLHTTP) ๋ก request instancet์์ฑ์๋ฃ");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
//Debug..
//alert ("new ActiveXObject(Microsoft.XMLHTTP) ๋ก request instancet์์ฑ์๋ฃ");
} catch (failed) {
request = null;
}
}
}
}
</script>
2. open , send
์์ฑ๋ ๋ฆฌํ์คํธ์ ์ ๋ณด๋ฅผ ์ ํ ํ๊ณ ๋ณด๋ด๋ ์ญํ ์ ํ๋ ์ค์ง์ ์ธ ์คํ ๋ถ๋ถ
<script>
//phone ๋ฒํธ๋ฅผ server๋ก GET ๋ฐฉ์ ์ ์ก function
function getSold(){
createRequest();
// GET๋ฐฉ์์ url์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๋ณด๋ด์ค๋ค. ( ?name=value)
// POST๋ฐฉ์์ ๋ฐ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๋ณด๋ด์ค๋ค.
var url = "calcServerAjax.jsp";
//request GET ๋ฐฉ์ , ํด๋นurl , ๋น๋๊ธฐ๋ก ์ฐ๊ฒฐํ ๊ฒ์ ๊ฒฐ์ : ์ฐ๊ฒฐ์ด๊ธฐํ
request.open("GET", url, true);
//๋๊ธฐ
//request.open("GET", url, false);
// POST ํค๋์ ๋ณด์
๋ ฅ
//request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//updatePage()ํธ์ถ ์ง์ (Call Back function ์ง์ )
request.onreadystatechange = updatePage;
// POST๋ฐฉ์ ๋ฐ์ดํฐ ์ ์ก
//var queryString = "name="+$('#name').val()+"&phone="+$('#phone').val();
//request : GET
request.send(null);
//request : POST
//request.send(queryString);
}
</script>
3. Call Back function
์ค์ง์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์์ ๋๊ณ ์ ๋ฐ์ดํธ ๋๋ ๋ถ๋ถ
<script>
//Call Back Method
function updatePage() {
// HttpRequest๋ 4๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ ์์ฒญ๊ณผ ์๋ต์ํ๋ค.
// 4๋จ๊ณ ์ผ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ธฐ์ 4์ผ๋๋ง ์ ๊ทผ
if (request.readyState == 4) {
//์ํ์ฝ๋ 200ํ์ธ
if (request.status == 200) {
var value = request.responseText;
value = trim(value);
// ๊ณต๋ฐฑ๋ฌธ์์ ๊ฑฐ
// var customerAddress = trim(value);
alert("====>.updatePage() = "+value);
//Debug..
// alert("Server์์ ๋ฐ์ ๋ด์ฉ : \n" + customerAddress);
//server ์์ ์ ์ก๋ฐ์ ์ฃผ์ html์ ์ ์ฉ
// document.getElementById("address").value = "\n"
// + customerAddress;
} else {
alert("์๋ฌ ๋ฐ์ : " + request.status+"==>"+request.statusText);
}
}
}
// ์๋ฐ์คํฌ๋ฆฝํธ๋ ํธ๋ฆผ๊ธฐ๋ฅ์ด ๋ฐ๋ก ์๊ธฐ์ ํจ์๋ฅผ ์์ฑ
// jquery ํธ๋ฆผ ์ ๊ณต
function trim(str){
return str.replace(/^\s\s*/,'').replace(/\s\s*$/,'');
}
</scrip>
์๋ฐ์คํฌ๋ฆฝํธ JSON
์ ์ด์จ์ ํ๋ค์์ ์๋ JavaScript Object Notation์ผ๋ก ์๋ฐ์คํฌ๋ฆฝ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด ์ง ๊ฒ์ ๋ณผ ์์๋ค.
ํ์ง๋ง JSON์ ์คํฌ๋ฆฝํธ ๋ฟ๋ง ์๋๋ผ ๋ง์ ๊ณณ์์ ํ์คํ๋ ๋ฐ์ดํฐ ์ ์ก ๊ตฌ์กฐ๋ก ์ฌ์ฉ๋์ด์ง๊ณ ์๋ค.
Ajax๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋๊ธฐ์ ๋ถ๋ถ์ ์นํ์ด์ง์ ๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅํ๋ค.
jQuery.ajax()
jQuery์์๋ Ajax์ ์ฝ๊ฒ ์ฌ์ฉ ํ ์ ์๋ ํธ๋ฆฌํ ํจ์๋ค์ ์ ๊ณตํด์ค๋ค.
๊ทธ์ค์์๋ $.ajax() ๋ฉ์๋๋ ๋ชจ๋ ์ ์ด์ฟผ๋ฆฌ Ajax ๋ฉ์๋์ ํต์ฌ์ด ๋๋ ๋ฉ์๋์ด๋ค.
ajax์์ ์ ์ผ ์ค์ํ ๋ถ๋ถ์ผ๋ก jQuery์ ajax์ ๊ฐ์ด ์ฐ๋ ์ด์ ์ด๋ค.
$.ajax()
$.ajax() ๋ฉ์๋๋ ์์ ์์ฑํ ๋ด์ฉ๋ค์ ์ง๊ด์ ์ผ๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ์ฝ๋์ ํจ์จ์ฑ์ ์ ๊ณตํ๋ค.
$.ajax()์์ ์์ฃผ ์ฌ์ฉํ๋ ์์ฑ
- url : ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ผ ์๋ฒ์ URL ์ฃผ์ / ๋ฆฌํ์คํธ ๋ฐ์ ๋ฃจํธ(RestController Mapping)
- data : HTTP ์์ฒญ๊ณผ ํจ๊ป ์๋ฒ๋ก ๋ณด๋ผ ๋ฐ์ดํฐ / JSONํ์
- type : HTTP ์์ฒญ ๋ฐฉ์(GET, POST) / default: GET
- dataType: ์๋ฒ์์ ๋ณด๋ด์ค ๋ฐ์ดํฐ์ ํ์ / ํ์ ์ ์ง์ ํ์ง ์๋๋ผ๊ณ jQuery์์ ์๋์ผ๋ก ๋ง๋ ๋ฐ์ดํฐํ์ ์ผ๋ก ๋ณด๋ด์ค๋ค.
- success : Call Back function์ ์ง์
<script>
$.ajax(
{
url :"postJSON-orderServer.jsp",
method : "POST",
data : {
name:$('#name').val(),
phone:$('#phone').val()
},
dataType : "text",
success : function(serverData, status){
alert(status);
alert("ServerData : "+serverData);
let JSONData = $.parseJSON(serverData);
alert("JSONData : "+JSONData);
let displayValue = "์ด๋ฆ : "+JSONData.name+"\n"
+"์ ํ : "+JSONData.phone+"\n"
+"์ฃผ์ : "+JSONData.adress;
$('#address').val(displayValue);
}
})
</script>
Ajax๊ฐ ๋ณด๋ธ ๋ฐ์ดํฐ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ๊ฑฐ๊ธฐ์ ๋ง๋ ์๋ต๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ด์ค๋ค.
<%@page contentType="text/html; charset=EUC-KR" %>
<%@page pageEncoding="EUC-KR"%>
<%@page import="org.json.simple.JSONObject"%>
<%@page import="org.json.simple.JSONArray"%>
<%
//==>ํ๊ธ์ฒ๋ฆฌ(POST) :: UTF-8๋ก encoding
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String phone = request.getParameter("phone");
//==> ์ฃผ์๋ฅผ ์์๋ก ๋ฐ์์ํค๊ธฐ...
String address ="";
int random = new java.util.Random().nextInt(3);
if( random ==0 ){
address = "์์ธ";
}else if( random ==1 ){
address = "๋ถ์ฐ";
}else{
address = "์ ์ฃผ๋";
}
%>
<%
System.out.println("postJSON-oderServer.jsp");
JSONObject obj = new JSONObject();
obj.put("name", name);
obj.put("phone", phone);
obj.put("adress", address);
System.out.println(obj);
%>
<%= obj%>
$.ajax()๋ jQuery์ ์ด๋ฒคํธ ํจ์์ธ on(), bind()์ ๊ฐ์ ์ญํ ์ ํ๋ฉฐ
get , post , getJSON๊ณผ ๊ฐ์ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ ajax ํจ์๋ฅผ ์ ๊ณตํ๋ค.
api๋ฅผ ํ์ธํ์ฌ ์ํฉ์ ๋ง์ถฐ ์ฌ์ฉํ๋ฉด ๋ ๊ฑฐ ๊ฐ๋ค.
Leave a comment