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