2012-02-29 5 views
1

$ post()를 사용하여 내 서버에서 세션 키를 검색하는 authenticate() 함수가 있습니다. 나는 $ post가 비동기 호출이라고 생각한다. 내 스크립트에서 어떤 작업을 수행 할 때마다 sessionKey가 있는지 확인하고 싶습니다. sessionKey가 없으면 인증()합니다. 내 문제는 authenicate()을 호출 한 후에 performTask()를 어떻게 실행합니까?함수 호출 전에 비동기 호출 수행

function foo() { 
    if (sessionKey) { 
     performTask(); 
    } else { 
     authenciate(); 
     performTask(); 
    } 
} 

function authenticate() {  
    $.post(url, function(data) { 
     sessionKey = data.sessionKey; 
    }); 
} 

편집 : 나는 또한 '콜백 기능을 인증합니다 같은 performTask()가() 여러 가지 다른 기능에서 호출됩니다() 인증 할에 넣어 싶지 않아요.

+0

게시 성공시 콜백 함수로 – Alfabravo

+0

간체 업데이트를 확인하십시오. 호출자가 인증 된 모든 호출에 대해 작은 비트를 추가하도록 할 수 있습니다. – Meligy

답변

1

authenticate 메소드에 대한 콜백을 전달할 수 있습니다. 20 곳의 다른 곳에서 authenticate가 호출되면 20 가지 콜백 메소드를 전달할 수 있습니다.

function foo() { 
    if (sessionKey) { 
     performTask(); 
    } else { 
     authenciate(function() { 
      performTask(); 
     }); 
    } 
} 

function authenticate(callback) {  
    $.post(url, function(data) { 
     sessionKey = data.sessionKey; 
     if (callback) callback(); 
    }); 
}
+0

감사합니다. 그 트릭을 했어! – Jon

+0

@ icu222much :이 답변은 바른 길에 있습니다. 그러나 @minitech의 답은 콜백이 호출하기 전에'authenticate'에 전달되었는지 확인하는 중요한 부분이 하나 빠져 있습니다. ('if (callback) callback();') 단순히 콜백없이'authenticate();'를 호출하면'ReferenceError'가 throw됩니다. 나는 적절한 수표를 추가 할 자유를 취했습니다. – josh3736

0

JQuery의 AJAX 호출에는 콜백 함수 (성공 및 오류)가 있습니다. 인증이 완료된 후 콜백으로 인증 후 조치를 전달할 수 있습니다.

또는 am 옵션을 설정하여 통화를 동기식으로 설정할 수 있습니다.

죄송합니다. 설명서에 연결되지 않았습니다. 나는 내 전화에서 올리고있다. 그냥 "jquery.ajax"구글 설명서를 찾으십시오.

* 편집 : * 귀하의 편집에 대한 응답으로, 당신은 당신을 인증 방법을 사용하면 대소에 호출 후 발생하는 변경 (또는 아무것도하지)하려는 경우 콜백 함수로 사용할 수있는 매개 변수를 줄 수 경우에 따라

0

확인이 질문은 : How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?

그것은 기적 AJAX를하는 예를 가지고있다. 기본적으로 async:false 매개 변수를 전달하고 바로 가기 post() 대신 ajax() 메서드를 사용해야 할 수 있습니다.

업데이트 :

이 같은 함수에서 전체를 포장한다 할 수있는 또 다른 것은 : jQuery의 약속 인터페이스를 사용하여 authenticate() 자체에 콜백을 통과

function foo() { 
    authenciate(function() { 
     performTask(); 
    }); 
} 

function authenticate(callback) {  

    if (!callback) { return; } 

    if (sessionKey) { 
     callback(); 
    } else { 
     $.post(url, function(data) { 
      sessionKey = data.sessionKey; 
      callback(); 
     }); 
    } 
} 
+0

-1; [** ** 동기 AJAX 호출을 사용하지 마십시오.] (http://stackoverflow.com/a/7337091/201952). – josh3736

2

(documentation 참조)

function authenticate(callback) { 
    var rq = $.post(url, function(data) { 
     sessionKey = data.sessionKey; 
    }); 

    if(callback) { 
     rq.success(callback); 
    } 
} 

예를 들어 authenticate(performTask) .