2011-08-15 12 views
0

ログインしたユーザーのFacebook IDをAPIで取得するコードがあります。それは次のようになります。Facebook APIへのAJAX呼び出しのタイミング

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

それはこのようになります取得するためのメソッド呼び出し:何が起こっている

function getFBIdSafe() 
{ 
    FB.api('/me', function(response) { 
     if (!response || response.error) { 
      return ""; 
     } else { 
      return response.id; 
     } 
    }); 
} 

は、私が行くと、他のものを行う、私は上記示したように、このメソッドを呼び出し、そして、ありますそれらのうちの1つは、AJAXコールで、自分自身のサーバーが "設定された" facebookIdを渡すことです。問題は、設定されていないということです。

私はFB.apiコールをすべて自分のコード内に置くことを好まないので、他のコードを成功裏にコールバックすることができます。私は自分のサーバーに電話をかける前に、このIDをきれいに処理し、このIDが必ず戻ってくるようにするにはどうしたらいいですか?

P.S.ユーザーが最初にFacebookにログインしていない限り、このコードは実行されません。チェックはサイトのステータスマーカーに基づいて行われますが、同じ問題ではありません。

答えて

1

現在のユーザーのFB Idを取得しないようにしたい場合は、IDが取得されるまでサーバーコールをすべて遅延させる必要があります。 jQueryを使用している場合、またはjQueryを使用したい場合は、$.Deferred()を使用して、FB Idが取得されるまですべてのサーバー呼び出しを延期できます。

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 */ 
} 

FBIdLoad.doneに渡されたすべての関数は(FB.Apiにidで応答する場合)オブジェクトがすでに解決された場合は、自動的に実行され、常に受信します。私はこのLKE何かを示唆しています要求されたID。

希望すると、

関連する問題