jQuery

[jQuery] 비동기통신 메소드 $.ajax(), $.get(), $.post() , load() 정리

dev.mk 2022. 2. 28. 14:05
반응형

Whait is AJAX?

Asynchronous JavaScript And XML의 약자로, 말 그대로 JavaScript와 XML을 이용한 비동기적 정보 교환 기법

 

Ajax 메소드의 종류

$.ajax() 비동기식 Ajax를 이용하여 HTTP 요청함
$.get() HTTP GET 방식으로 요청 후 서버로부터 데이터를 받음
$.post() HTTP POST 방식으로 요청 후 서버로부터 데이터를 받음
$.getScript() HTTP GET 방식으로 요청 후 서버로부터 받은 JavaScript 파일을 로드하고 실행
$.getJSON() HTTP GET 방식으로 요청 후 서버로부터 받은 JSON 파일을 로드하고 실행
.load() URL로부터 HTML 데이트를 받고 jQuery 셀렉터로 선택된 위에 넣어 줌으로써 동적으로 페이지의 내용을 쉽게 교체함

 

$.ajax() 

jQuery.ajax( url [, settings] ) >> 1.5 이상버젼
jQuery.ajax( settings )  >> 1.0 이상버젼

$.ajax 기본 사용방법 및 주요 옵션

    $.ajax({
        url : requestURL,
        type : 'GET',
        async: true,
        data : JSON.stringify(requestParam),
        dataType : "json",
        timeout: 10000,    
        contentType:"application/json",        
        beforeSend:function(){
            $('.wrap-loading').removeClass('display-none');
        },
        complete:function(){
            $('.wrap-loading').addClass('display-none');
        },
        success : function(data){
            if(successFunction!=undefined){
                successFunction(data);
            }
        },
        error : function(request,status,error){
            alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
            var err=JSON.parse(request.responseText);
            
            alert(err.resData[0].errorMsg);
            if(errorFunction!=undefined){
                errorFunction();
            }
                
        $('.wrap-loading').addClass('display-none');
        },
        fail : function() {
            alert("인터넷 연결 상태를 확인해주세요.");
            $('.wrap-loading').addClass('display-none');
        }
    });
}

async (비동기 통신 여부)

 - true :  기본값, 비동기 (Asynchronous, 요청을 보낸 후 응답결과와는 상관없이 다음방식이 동작하는 방식)

 - false : false = 동기 (Synchronous, 요청을 보낸 후 응답결과를 받아야지만 다음 동작이 이루어지는 방식)

 

contentType ( 전송헤더의 타입)

 - 서버에 데이터를 보낼 때 사용 content-type 헤더의 값

 - application/json; charset-utf-8이 흔히 쓰인다. 디폴트는 application/x-www-form-urlencoded; charset=utf-8

 

dataType (서버에서 어떤 타입을 받을 것인지 정의)

 - text, html, xml, json, jsonp, and script 타입이 있음

 - {"success":true} 와 같은 구조의 값을 받으려면 dataType : "json"로 작성해야함

 - "success" 와 같은 문자열 값을 받으려면 dataType : "test"로 작성

 - <div>SUCCESS!!!</div> 와 같은 결과를 원한다면 dataType : "html"로 작성

 

timeout (요청제한시간)

 - 제한 시간 (밀리초)을 설정, $. ajaxSetup 에서 지정한 값을 통신에 따라 개별적으로 덮어쓸 수 있음

 - AJAX 요청의 제한 시간을 밀리 초 단위로 설정하며 제한 시간 안에 요청이 완료되지 않으면 요청을 취소하거나
error 콜백이 정의되어 있다면 호출됨

 

type ( HTTP 통신의 종류)

 - HTTP 통신의 종류를 설정, 기본값은 "GET"

 - GET, POST, PUT, DELETE 등등 존재

 - RESTful에 "PUT"또는 "DELETE"를 지정할 수 있지만 모든 브라우저가 지원하는 것은 아님

 

complete (function)

 - AJAX 통신 완료될 때 호출되는 함수. success이나 error가 호출된 후에 호출됨

 

beforeSend (function)

 - AJAX 요청전에 실행되는 함수, 반환값을 false로 설정하면 AJAX 전송을 취소함

 

error (function)

 - AJAX 통신에 실패했을 때 호출되는 콜백함수

 

success (function)

 - AJAX 통신에 실패했을 때 호출되는 콜백함수

 - 함수의 응답 본문은 이 함수의 첫 번째 매개변수로 전달되며 dataType 프로퍼티에 명시한 형태로 구성되고 - 두 번째 매개변수는 상태값을 나타내는 문자열이며 항상 success로 나타낸다

 

기타

JSON.stringify

 - JSON을 String 형태로 변환

JSON.parse

 - String을 JSON 형태로 변환

 

var temp = {
	name: "MK"
	,city : "SEOUL"
}

console.log(_stringify);
//결과
{"name":"MK","city":"SEOUL"} // 스트링 형태로 출력 

console.log(_parse);
//결과
{name: 'MK', city: 'SEOUL'} //jsonObject 형태로 출력

 

 

메소드 체이닝(method chaining)

메서드가 객체를 반환하게 되면, 메서드의 반환 값인 객체를 통해 또 다른 함수를 호출할 수 있다. 

 

done

 - HTTP 요청이 성공하면 요청한 데이터가 done() 메소드로 전달된다.

fail

 - HTTP 요청이 실패하면 오류와 상태에 관한 정보가 fail() 메소드로 전달된다.

always

 - HTTP 요청이 성공하거나 실패하는 것에 상관없이 언제나 always() 메소드가 실행된다.

아래는 위의 기존 Ajax를 메소드체이닝으로 바꿔봤다.

$.ajax({
    url : requestURL,
    type : 'GET',
    async: true,
    data : JSON.stringify(requestParam),
    dataType : "json",
    timeout: 10000,    
    contentType:"application/json",        

})
// HTTP 요청이 성공하면 요청한 데이터가 done() 메소드로 전달됨.  = success 콜백함수와 같음
.done(function(json) { 
    $("<h1>").text(json.title).appendTo("body");
    $("<div class=\"content\">").html(json.html).appendTo("body"); 
}) 
// HTTP 요청이 실패하면 오류와 상태에 관한 정보가 fail() 메소드로 전달됨.  = error 콜백함수와 같음
.fail(function(xhr, status, errorThrown) {
    $("#text").html("오류가 발생했다.<br>") 
    .append("오류명: " + errorThrown + "<br>") 
    .append("상태: " + status); 
}) // 언제나 실행  = complete함수와 같음
.always(function(xhr, status) { 
    $("#text").html("요청이 완료되었습니다!"); 
});

 

 

$.ajaxSetup() 

공통적인 기본 ajax 요청을 미리 설정하는데 사용

$.ajaxSetup({ 
    url: "/apit/"	//미리정의
    , global: false
    , type: "POST" //미리정의
}); 

$.ajax({ data: sendData });

url,과 type를 미리정의해서 사용할 수 있다.

 

$.get() 

HTTP GET 방식으로 요청 후 서버로부터 데이터를 받음

- 데이터를 URL에 담에서 보낸다 

//example 1
// GET 방식으로 서버에 HTTP Request를 보냄. 

$.get("/get/example?name=ajax&age=10"
    , function(data, status){ 
        $("#text").html(data + "<br>" + status); 
    }
);


//example 2
$.get("/get/example?name=ajax&age=10"
    ,function(data) {
        alert("success" );
    }
    ,'json' /* xml, text, script, html */
)
.done(function(data) {
    alert("second success" );
})
.fail(function(data) {
    alert("error" );
})
.always(function(data) {
    alert("finished" );
});

 

$.post() 

HTTP POST 방식으로 요청 후 서버로부터 데이터를 받음

- 데이터를 Body에 담아서 보낸다.

//example 1
// POST 방식으로 서버에 HTTP Request를 보냄. 
$.post("/post/example"
    ,{name: "devmk", age: 3,}
    , function(data, status){ 
        $("#text").html(data + "<br>" + status); 
    }
);


//example 2
$.post("/post/example"
    ,{name: "devmk", age: 3,}
    ,function(data) {
        alert("success" );
    }
    ,'json' /* xml, text, script, html */
)
.done(function(data) {
    alert("second success" );
})
.fail(function(data) {
    alert("error" );
})
.always(function(data) {
    alert("finished" );
});

 

$.getJSON()

HTTP GET 방식으로 요청 후 응답을 JSON 형식으로 받을때 사용

$.getJSON("example?foo=1"
    , { tags: "mount rainier", tagmode: "any", format: "json" }
    , function(data) { 
        $.each(data.items, function(i,item) { 
            $("<img/>").attr("src", item.media.m).appendTo("#images"); 
            if(i == 3){
                return false; 
            }
        }); 
     }
 );

 

.load()

$(selector).load(URL,data,callback);

load() 메소드는 읽어 들인 HTML 코드를 선택한 요소에 표시한다.
또한, 선택자를 URL 주소와 함께 전송하면, 읽어 들인 HTML 코드 중에서 선택자와 일치하는 요소만을 배치함

 
//  Html Content 로딩  
$('#result').load('ajax/test.html');  
  
//  Html Content 로딩 후 메시지  
$('#result').load('ajax/test.html', function() {  
  alert('Load was performed.');  
});  
  
//  Html Content #container Target 로딩  
$('#result').load('ajax/test.html #container');  
  
//  array parameter 전달 후 Html Content 로딩  test.jsp로 choices[] 파라미터를 보냄
$("#objectID").load("test.jsp", { 'choices[]': ["Jon", "Susan"] } );  

$(function() {
    $("#btnRequest").on("click", function() {
        // URL 주소에 존재하는 HTML 코드에서 <li>요소를 읽은 후에 id가 "list"인 요소에 배치한다.
        $("#list").load("/examples.html li");
    });
    $("#btnRequest").on("click", function() {
        // URL 주소에 존재하는 HTML 코드에서 아이디가 id="temp"인 요소를 배치한다.
        $("#list").load("/examples.html #temp");
    });
});

 

본문의 참조

https://webinformation.tistory.com/22

https://araikuma.tistory.com/640?category=820803

 

반응형