본문 바로가기
Web/jQuery

AJAX 란?/AJAX 예제/ajax sample/ajax example

by 나비와꽃기린 2016. 6. 22.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

1. Ajax

1.1 Ajax?

-Asynchronous(비동기) JavaScripr and XML의 약어

-xml를 이용하여 비동기로 통신을 처리하기 위한 기술

-XMLHttpRequest(XHR) 객체로 구현

-자바스크립트로 동적 파일 실행 요청

-자바스크립트로 HTML요소 제어

 

1.2 Ajax의 장점

-응답이 오기전에 다른 작업 가능

-브라우저의 페이지 전체 갱신이 없음 à 페이지 이동 없이 빠르게 화면을 전환

-서버처리를 기다리지 않고 비동기 요청이 가능

-수신하는 데이터 양을 줄일 수 있음

 

***실습1 자바스크립트로 Ajax 구현하기

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>자바스크립트로 Ajax 구현하기</title>

<script type="text/javascript">

        window.onload = function() {

                 var xhr;

                 //표준 & 비표준 구분.

                 if (window.XMLHttpRequest) {

                         xhr = new XMLHttpRequest();

                 } else if (window.ActiveXObject) {

                         xhr = new ActiveXObject("Msxml2.XMLHTTP");

                 } else {

                         throw new Error("Ajax 지원하지 않는 브라우저입니다.");

                 }

 

                 xhr.onreadystatechange = function() {

                         if (xhr.readyState == 4) { //완료가 되면

                                  if (xhr.status >= 200 && xhr.status < 300) { //제대로 읽어왔다면

                                          alert(xhr.responseText);

                                          document.getElementById('container').innerHTML = xhr.responseText;

                                  }

                         }

                 }

 

                 xhr.open('GET', 'resource.html'); //GET방식으로 xhr 객체에 resource.html 보내는것

                 xhr.send('');

        }

</script>

</head>

<body>

        <div id="container"></div>

</body>

</html>

 

XMLHttpRequest 객체???

-웹서버와 데이터를 주고 받을 때 사용

-비표준, 그러나 대부분의 브라우저에서 지원

-내용의 변경 없이 새로운 컨텐츠를 불러 올 수 있음

-자바스크립트로 동기 방식의 호출을 할 수 있음

 

***실습2 서버의 데이터를 대상 엘리먼트에 삽입하기

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>서버의 데이터를 대상 엘리먼트에 삽입하기</title>

<style type="text/css">

div {

  width: 180pxheight: 80px;

  margin: 3pxfloat: left;

}

</style>

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

<script type="text/javascript">

$(function() {  

           $('#menu1').click(function () {          

                           $('#message1').load('menu.html');

                           return false;  

                 });

          

           $('#menu2').click(function () {         

                           $('#message2').load('menu.html li');

                          return false;  

                 });

});

</script>

</head>

<body>

<div>

        <a href="#" id="menu1">메뉴 보기 1</a><p>

        <span id="message1"></span>

</div>

<div>

        <a href="#" id="menu2">메뉴 보기 2</a><p>

        <span id="message2"></span>

</div> 

</body>

</html>

 

 

menu.html

 

<p> </p>

<ul>

<li> 짜장면 </li>

<li> 짬뽕 </li>

<li> 기스면 </li>

<li> 탕수육 </li>

</ul>

<p> 메뉴를 골라주세요.</p>

 

***실습3 서버의 데이터를 대상 엘리먼트에 삽입하기

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>서버의 데이터를 대상 엘리먼트에 삽입하기</title>

<style type="text/css">

div {

  width: 200pxheight: 80px;

  margin: 3pxfloat: left;

}

</style>

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

<script type="text/javascript">

$(function() {  

           $('#menu1').click(function () {    

                    $.ajax({

                             url:'menu.html',

                             dataType:"html",

                             success: function(data){

                                  $('#message1').html(data);

                             }

                    });

                    return false;  

                 });

          

           $('#menu2').click(function () {  

                    $.ajax({

                             url:'menu.html',

                             dataType:"html",

                             success: function(data){                               

                                  $('#message2').html($(data).find('li'));

                             }

                     });

                         return false;  

                 });

});

</script>

</head>

<body>

<div>

        <a href="#" id="menu1">메뉴 보기 1</a><p>

        <span id="message1"></span>

</div>

<div>

        <a href="#" id="menu2">메뉴 보기 2</a><p>

        <span id="message2"></span>

</div> 

</body>

</html>

 

 

***실습4 JSON 이용하기

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>JSON 이용하기</title>

<style>

td {

  border: 1px solid gray;

}

</style>

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

<script type="text/javascript">

$(function() {

    $.ajax({

         url : "item.json",

         dataType : "json",

         success : function(data) {

             $("#treeData").append(

                    "<tr><td>id</td>" + "<td>name</td>"

                  + "<td>price</td>" + "<td>definition</td>" + "</tr>");

             $.each(data, function(i) {

                 $("#treeData").append("<tr>" + "<td>"                

                         + this.id + "</td>" + "<td>"

                         + this.name + "</td>" + "<td align='right'>"

                         + this.price + "</td>" + "<td>"

                         + this.definition +i+ "</td>" + "</tr>");

             });

         }

    });

});

</script>

</head>

<body>

  <table id="treeData"></table>

</body>

</html>

 

Item.json

 

[

  {

    "id": "1",

    "name": "레몬",

    "price": " 3000",

    "description": "레몬에 포함되어 있는 쿠엔산은 피로회복에 좋다. 비타민C 풍부하다."

  },

  {

    "id": "2",

    "name": "키위",

    "price": " 2000",

    "description": "비타민C 매우 풍부하다. 다이에트와 미용에도 매우 좋다."

  },

  {

    "id": "3",

    "name": "블루베리",

    "price": " 5000",

    "description": "블루베리에 포함된 anthocyanin(안토시아닌) 눈피로에 효과가 있다."

  },

  {

    "id": "4",

    "name": "체리",

    "price": " 5000",

    "description": "체리는 맛이 성분이 많고 피로회복에 듣는다."

  },

  {

    "id": "5",

    "name": "메론",

    "price": " 5000",

    "description": "메론에는 비타민A 칼륨이 많이 포함되어 있다."

  },

  {

    "id": "6",

    "name": "수박",

    "price": "15000",

    "description": "수분이 풍부한 과일이다."

  }

]

 

JSON ????

-자바스크립트로 개체를 표현하는 또다른 방법

 

 

***실습5 $.getJSON으로 데이터 얻기

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>$.getJSON으로 데이터 얻기</title>

<style>

img {

  height: 100px;

  float: left;

}

</style>

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

<script type="text/javascript">

$(function() {

  $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?"

      + "tags=raccoon&tagmode=any&format=json&jsoncallback=?",

      function(data) {

        $.each(data.items, function(i, item) {

          $("<img/>").attr("src", item.media.m).appendTo("#images");

          if (i == 4)

            return false;

        });

      });

}); 

</script>

</head>

<body>

  <div id="images"></div>

</body>

</html>

 

****실습6 XML 파일을 GET 방식으로 로드하기

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>XML 파일을 GET 방식으로 로드하기</title>

<style>

td {

  border: 1px solid gray;

}

</style>

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

<script type="text/javascript">

$(function() {

         $.get('item.xml', function(data) {

             $("#treeData").append(

                    "<tr><td>id</td>" + "<td>name</td>"

                  + "<td>price</td>" + "<td>description</td>" + "</tr>");

             $(data).find('item').each(function() {

                   var $item = $(this);

                 $("#treeData").append("<tr>" + "<td>"                

                         + $item.attr("id") + "</td>" + "<td>"

                         + $item.attr("name") + "</td>" + "<td align='right'>"

                         + $item.find("price").text() + "</td>" + "<td>"

                         + $item.find("description").text() + "</td>" + "</tr>");

             });

    });

});

</script>

</head>

<body>

  <table id="treeData"></table>

</body>

</html>

Item.xml

<?xml version="1.0" encoding="UTF-8"?>

<items>

  <item id="1" name="레몬">

    <price>3000</price>

    <description> 레몬에 포함되어 있는 쿠엔산은 피로회복에 좋다. 비타민C 풍부하다. </description>

   </item>

  

   <item id="2" name="키위">

    <price>2000</price>

    <description> 비타민C 매우 풍부하다. 다이에트와 미용에도 매우 좋다. </description>

   </item>

  

    <item id="3" name="블루베리">

    <price>5000</price>

    <description> 블루베리에 포함된 anthocyanin(안토시아닌) 눈피로에 효과가 있다. </description>

   </item> 

 

   <item id="4" name="체리">

    <price>5000</price>

    <description> 체리는 맛이 성분이 많고 피로회복에 듣는다. </description>

   </item> 

 

   <item id="5" name="메론">

    <price>5000</price>

    <description> 메론에는 비타민A 칼륨이 많이 포함되어 있다. </description>

   </item> 

 

   <item id="6" name="수박">

    <price>15000</price>

    <description> 수분이 풍부한 과일이다.</description>

   </item>

 </items>