Ajax에 대해서(jQuery를 이용한 플리커 API 처리)

Aug 5, 2013

AJAX란?

대화식 웹 애플리케이션 제작을 위해 아래와 같은 조합을 이용하는 웹 개발 기법이다.

Asynchronous Javascript and XML - 비동기적인 자바스크립트와 XML

AJAX의 장단점

장점

단점

웹 브라우저

Ajax 지원

Ajax 미지원

활용사례

크로스 도메인 문제

기본적으로 Ajax 요청은 도메인이 같은 호스트로만 요청이 가능하고, 도메인이 다른 호스트에 요청하게 되면 콘텐츠를 받아올 수 없다. 예를 들어 aaa.com이라는 호스트에서 http://bbb.com/rss.xml 을 AJAX 요청해서 받아 올 수는 없다. 이를 해결할 수 있는 4가지 방법이 있다.

플리커 API 활용 예제

HTML

<div id="result" style="width:800px;height:60px;overflow-y:auto;border:1px solid #000000;padding:10px;margin:0 auto;margin-bottom:10px;"></div>
<div style="display:none;width:800px;height:20px;margin:0 auto;" id="loading">Loading.</div>
<ul id="list"></ul>

Javascript

<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"></script>
<script>
// 타이머
var timer = null;
  
// 로딩 시작 처리
function startLoading() {
    $("#loading").show();
  
    timer = setInterval(function() {
        $("#loading").append(".");
    },100);
} 
  
// 로딩 끝 처리
function stopLoading() {
    $("#loading").hide();
  
    clearInterval(timer);
    timer = null;
}
  
// 로딩 시작하기
startLoading();
  
// Ajax 불러오기
$.ajax({
    url: "http://api.flickr.com/services/rest/?method=flickr.interestingness.getList&api_key=d7cf8651384b2e99038ecf497b440421&format=json&nojsoncallback=1&auth_token=72157627258910199-5bc337cbd1122195&api_sig=9de8ad17087c2026f670fb26478c48bb",
    type: "get",
    dataType: "json", // 리턴받을 데이터의 타입 - text, xml 등...
    data: { // 파라미터     
    },
    success: function(data) { // 성공했을 때의 처리 콜백함수
        $("#result").append("success<br />");
  
        $(data.photos.photo).each(function() {
            // 박스 만들기
            var html = "<div style='float:left;margin:0 10px 10px 0;'><img src='http://farm"+this.farm+".static.flickr.com/"+this.server+"/"+this.id+"_"+this.secret+"_s.jpg' /></div>";
            $("#list").append(html);
  
            // 박스에 클릭이벤트 정의
            $("#list").children(":last-child").click(function() {
                // 페이드 아웃 효과 후 삭제
                $(this).fadeOut(function() {
                    $(this).remove();
                });
            });
        });     
    },
    complete: function() { // ajax 전송이 완료 됐을 때의 콜백함수
        stopLoading();
  
        $("#result").append("complete<br />");
    },
    error: function() { // 에러가 발생했을 때의 콜백함수
        $("#result").append("error<br />");
    }
});
</script>