ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [jQuery] 비동기통신 메소드 $.ajax(), $.get(), $.post() , load() 정리
    jQuery 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

     

    반응형

    댓글

Designed by Tistory.