7. Jquery로 AJAX 사용

2017. 1. 20. 17:26Programming/JQuery


$.ajax(settings)

  • jQuery를 이용한 ajax통신의 가장 기본적인 API
  • 주요속성
    • data : 서버에 전송할 데이터, key/value 형식의 객체
    • dataType : 서버가 리턴하는 데이터 타입 (xml, json, script, html)
    • type : 서버로 전송하는 데이터의 타입 (POST, GET)
    • url : 데이터를 전송할 URL
    • success : ajax통신에 성공했을 때 호출될 이벤트 핸들러



1
2
3
4
5
6
7
8
9
10
11
12
13
14
**Ajax Events**
jquery는 Ajax가 실행되는 순서(event)를 나누고
Event에 맞춰 CallBack Function을 지정 가능
 
**구조**
ajaxStart
    beforeSend
        success(statusCode=200) 또는 error
    complete
ajaxStop
 
**get() .post .load() 등 ajax 줄여 사용하는 메소드들이 많이 있다.
.load(url, data, complete)
.get/post(url, data, success, dataType)
cs




[기본 사용 형태]

1
2
3
4
5
6
7
8
9
10
11
12
13
var settings = {
        url: "index.html",
        contentType: "multipart/form-data;",
        data: $("form[name=testForm]").serialize(),
        type: "GET",
        beforeSend: function(jqXHR, settings){},
        success: function(data, textStatus, jqXHR){},
        error: function(jqXHR, textStatus, errorThrown){},
        complete: function(jqXHR, textStatus){}, //success/error 후 콜백함수
        statusCode: {404function(){alert("잘못된 요청");}}
}
 
$.ajax(settings);
cs



<data 넘기는 다른 형태>


1)


data: { name: "John", location: "Boston"},

data: "name=John&location=Boston",

결과: index.html?name=John&location=Boston */


2)

 

contentType: "application/json"

dataType: "json"

data: JSON.stringify({name:"John", location:"Boston"})



예제: 댓글 기능 $.ajax(settings)로 구현



1) 기본 settings 설정


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
var contextPath = "${requestScope['javax.servlet.include.context_path']}";
   var settings = function() {
      this.url = contextPath;
      this.type = "GET";
      this.dataType = "json";
      this.success = function(data) {
      };
      this.statusCode = {
                         400 : function() {
                           alert("잘못된 요청입니다.")
                         },
                         404 : function() {
                           alert("없는 url입니다.")
                         }
      }
   }
 
cs




2) 댓글 로드(댓글List + 페이지List)


1
2
3
4
5
6
7
8
9
10
var loadComments = function(paraPage) {
            var loadSet = new settings(); //settings JSON 객체 생성
            var page = (paraPage) ? paraPage : 1;
            loadSet.url += "/comments/${param.board_num}/" + page;
            loadSet.success = function(data) {
                commentList(data["list"]);
                pagingLoad(data["paging"]);
            }
            $.ajax(loadSet);
        }
cs




2-1) 콜백함수1(댓글 목록)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function commentList(data) {
            var tbodyData = $("#commentsList .data");
            var tbodyList = $("#commentsList .list");
            tbodyList.html("");
            $.each(data, function(index, item) {
                tbodyData.find(".num").text(item.num);
                tbodyData.find(".mem_num").text(item.mem_num);
                tbodyData.find(".mem_id").text(item.mem_id);
                tbodyData.find(".mem_name").text(item.mem_name);
                tbodyData.find(".content").text(item.content);
                tbodyData.find(".indate").text(item.indate);
                tbodyData.find(".delete")
.html("<button onclick='javascript:deleteComments("+item.num+","+item.mem_num+")'>삭제</button>");
                tbodyList.append(tbodyData.html());
            });
        }
cs




2-2) 콜백함수2(페이지 목록)


1
2
3
4
5
6
7
8
9
10
11
12
var pagingLoad = function(pagingJson) {
            var pagingSet = new settings();
            var pagingDiv = $("#pagingDiv");
            pagingSet.url += "/paging/scriptPaging";
            pagingJson["action"= "loadComments";
            pagingSet.data = pagingJson;
            pagingSet.dataType = "html"//success의 매개변수가 json 타입이므로 html로 수정
            pagingSet.success = function(data) {
                pagingDiv.html(data);
            }
            $.ajax(pagingSet);
        }
cs




3) 댓글 추가


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var addComments = function(formVal) {
            var addSet = new settings();
            addSet.url += "/comments/insert.do";
            var formData = {};
            $.each($(formVal).serializeArray(), function(index,item){
                formData[item["name"]] = item["value"];
            });
            addSet.data = JSON.stringify(formData);
            addSet.success = function(insertJson) {
                if (insertJson["insert"> 0) {
                    alert("저장 성공");
                    loadComments();
                } else {//저장 실패시
                    if (insertJson["login"== -2) {
                        var login = window.confirm
("로그인시 이용가능합니다. 로그인하시겠습니까?")
                        if(login){window.location.href= contextPath+ "/login.do";}
                    } else {
                        alert("저장 실패");
                    }                    
                }
            }
            addSet.type = "POST";
            //만약 json에 key 값이 없으면 addSet.contentType 오류 발생
            //이 오류는 아래와 같이 해결한다.
            addSet["contentType"= "application/json";
            $.ajax(addSet);
        }
cs




4) 댓글 삭제


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var deleteComments = function(num, memNum) {
             var removeSet = new settings();
            removeSet.url += "/comments/" +num+"?mem_num="+memNum;
             removeSet.type = "DELETE";
             removeSet.success = function(deleteComment){
             if(deleteComment["delete"]>0){
                alert("삭제 성공");
                } else {
                    if (deleteComment["login"=== -2) {
                        var confirm = window.confirm
("로그인시 이용가능합니다. 로그인하시겠습니까?");
                        if (confirm) {
                            window.location.href = contextPath + "/login.do";
                        }
                    }
                    if (deleteComment["login"=== -3) {
                        window.confirm("작성자만 삭제 가능합니다. 로그인하시겠습니까?");
                    } else {
                        alert("삭제 실패");
                    }
                }
            }
            $.ajax(removeSet);
        }
cs


'Programming > JQuery' 카테고리의 다른 글

8. 회원가입 폼  (0) 2017.02.02
6. Jquery-UI 사용법  (0) 2017.01.19
5. 이벤트, 애니메이션  (0) 2017.01.19
4. 엘리먼트 제어  (0) 2016.12.19
3. chain, event  (0) 2016.12.19