2010-01-11 6 views
1

내가 이런 코드 snipet이 완료되면 제어하는 ​​플래그 VAR를 사용하는 콜백 함수를 만들 :대신에 특정 기능이


var nbrPrevArt = $("#accordion > div .accordionPanel").size(); 
var processing = false; 

if (nbrPrevArt == 0) { 
    processing = true; 
    getArticlesPreview();//Fetches articles first 
} 

//loop that makes the browser to wait until finishes "getArticlesPreview()" 
while(!processing) 
{ 
} 

//getArticlesPreview() is finished now we can safely execute this step 
$.ajax({ 
    type: "GET", 
    url: "http://mydomain.com/somepage.htl", 
    success: function(data) { alert(data);} 
}); 


//----------------------------------- 

function getArticlesPreview() 
{ 
    //lenghty operation 
    processing = false; 
} 

내가 만드는 루프를 사용하고 있기 때문에 매우 실용적 보이지 않는 다음 단계를 수행하기 위해 기능이 경쟁적으로 실행될 때까지 대기합니다.

첫 번째 작업이 끝나고 두 번째 단계 ($ .ajax 호출)가 제대로 실행될 때 호출되는 콜백 메시지를 정의하는 방법이 있습니까?

미리 감사드립니다. Texeira

+0

+1, 멋진 트릭은, 내가 당신이 적용 할 필요가 없습니다이 경우 그 – karim79

답변

3

apply 함수를 사용하여 직접 콜백을 만들 수 있습니다. 당신은 getArticlesPreview에 callback 매개 변수를 추가하고이 콜백 내에 함수를 넣어야합니다.

이는 다음과 같이 수 :

function makeAjax() 
{ 
    $.ajax({ 
     type: "GET", 
     url: "http://mydomain.com/somepage.htl", 
     success: function(data) { alert(data);} 
    }); 
} 

function getArticlesPreview(callback) 
{ 
    //lenghty operation 

    callback.apply(this) 
} 

var nbrPrevArt = $("#accordion > div .accordionPanel").size(); 

if (nbrPrevArt == 0) { 
    getArticlesPreview(makeAjax); 
} 
+0

생각하지 않을 것이다, 당신은 익명의 함수로 콜백을 실행할 수 있습니다. "callback()". 하지만 여전히 +1. – nemisj

+0

좋은 사람들! 큰 의견을 주셔서 대단히 감사합니다! –

관련 문제