2011-08-15 4 views
0

로그인 한 사용자의 Facebook ID를 API를 통해 가져 오는 코드가 있습니다. 즉, 다음과 같습니다페이 스북 API에 대한 AJAX 호출 타이밍

var facebookId = ""; 
facebookId = getFBIdSafe(); 

메서드 호출은 다음과 같습니다 얻을 :

, 나는 위의 켰을 때,이 메소드를 호출 한 다음 가서 다른 물건을 할입니다 무슨 일
function getFBIdSafe() 
{ 
    FB.api('/me', function(response) { 
     if (!response || response.error) { 
      return ""; 
     } else { 
      return response.id; 
     } 
    }); 
} 

, 그 중 하나는 AJAX가 내 서버를 호출하여 "set"된 facebookId을 전달하는 것입니다. 문제는 결코 설정되지 않는다는 것입니다.

FB.api 코드를 내 코드에 넣지 않기를 바래서 다른 코드를 성공 호출에 넣을 수 있습니다. 이 문제를 어떻게 처리하고 자신의 서버에 전화를 걸기 전에이 ID가 항상 돌아 왔는지 확인하려면 어떻게해야합니까?

P. 사용자가 처음에 페이스 북에 로그인하지 않는 한이 코드는 실행되지 않습니다.이 체크는 사이트의 상태 표시자를 기반으로 이루어 지므로 동일한 문제가 아닙니다.

답변

1

현재 사용자의 FB ID를 검색하는 것을 원하지 않으면 ID를 얻을 때까지 모든 서버 호출을 지연시켜야합니다. jQuery를 사용하거나 jQuery를 기꺼이 사용하려는 경우 $.Deferred()을 사용하여 FB Id가 검색 될 때까지 모든 서버 호출을 지연시킬 수 있습니다. 개체가 이미 해결 된 경우합니다 (FB.Api가 ID로 응답하는 경우) FBIdLoad.done에 전달

var FBIdLoad = $.Deferred(); 
function getFBIdSafe() 
{ 
    FB.api('/me', function(response) { 
     if (!response || response.error) { 
      FBIdLoad.resolveWith(""); 
     } else { 
      FBIdLoad.resolveWith(response.id); 
     } 
    }); 
} 

[...] 

FBIdLoad.done(function(FBId){ 
    /* Your server call with the Id */ 
} 

모든 기능이 자동으로 실행됩니다, 항상 수신 :이 LKE 뭔가를 제안하고있어 요청한 ID.

희망 하시겠습니까?