진이의 Developer Story

when() 함수 본문

Script/jQuery

when() 함수

JIN3260 2016. 11. 4. 17:47

ajax를 처리하다 보면, 순차적으로 실행이 되어야 할때가 있습니다.

예로 들자면, A,B,C를 각각 호출해야 하는 상황입니다.

B는 A에 의존적이며, C는 B에 의존적이죠.


그럼 A가 완전히 호출된 다음에, B 그리고 C가 순서대로 호출이 되어야 합니다.

그런데 ajax의 비동기 방식으로 실행을 한다면, 호출은 순서대로 되겠지만

처리되는 순서는 다를 수 있습니다.


이런 경우에는 ajax 옵션에 async (기본값 : true, 비동기식) 를 false (동기식)로 해주시면 되지만, 최신 jQuery에서는 지원이 되질 않는 것 같더라구요.


그래서 알아본 것이 바로 when()함수입니다.

jQuery 1.5 이상부터 추가가 되었다고 합니다.


사용법은 다음과 같습니다.

// done 의 경우 성공적으로 호출되었을때 함수를 호출합니다.
$.when( $.ajax( "test.json" ) ).done(function(e) {
    alert("test.json가 호출이 되었습니다");
});

// then의 경우는 ajax가 성공적으로 호출이 되었을때, 실패했을때 각각 다른 함수를 호출합니다.
$.when( $.ajax( "test.jsp" ) ).then(success, fail);


그런데 중요한 점은 when() 함수를 이용해서 동기식 처리를 하는 방법이죠.

var urls= ['test1.json', 'test2.json', 'test3.json'];
var defer = new $.Deferred();
var next = defer;
 
for(var i=0; i<urls.length; i++){ 
    next = next.then(function(){
        return $.ajax(urls[i]).done(function(e){ 
            // 함수 호출 후 실행될 함수
        }); 
    }); 
} 

이렇게 하시면 test1.json -> test2.json -> test3.json 순으로 호출할 수 있습니다.

'Script > jQuery' 카테고리의 다른 글

jQuery Form Validation 사용중 iCheck errorPlacement 처리  (0) 2016.09.30
jqGrid 기본 사용방법  (6) 2016.02.11
Comments