0

したがって、現在自分のWebサイトにいる認証済みユーザーのアクセストークンを取得するために、関数を使用しています。

var token;
FB.getLoginStatus(
        function(response){
            if (response.session) { 
                alert(response.session.access_token);
                //This correctly shows the access token. <-----GOOD 
                token = response.session.access_token;
            } 
            else{
                //Other stuff.  
            }
        }
);
alert(token);
//This shows undefined.  <------PROBLEM

アクセス トークンを知る唯一の方法は、FB.getLoginStatus の呼び出し内で呼び出される無名関数内にあることです。

問題は、FB.getLoginStatus 内の匿名関数が、ページ上の他のすべてのスクリプトが終了するまで実行されないことにあると判断しました。したがって、変数「トークン」は、すべての実行が完了するまで設定されず、役に立たなくなります。

アクセストークンを普遍的にアクセス可能な変数に抽出する方法はありますか? 単一の匿名関数でアクセス トークンの知識を必要とするすべてのコードを記述する必要はありません。

4

2 に答える 2

2

問題は、getLoginStatus が FB API に接続する非同期呼び出しであることです。ただし、その間、スクリプトは実行され続けるため、アラート(トークン); getLoginStatus() が終了する前に呼び出されます。したがって、トークンはまだ設定されていません。

トークンで正確に何をしたいのかわかりませんが、これを行う私の方法は、トークンが読み込まれるとすぐに getLoginStatus() 内で関数を呼び出してから、必要な機能に進むことです。そう...

var token;
FB.getLoginStatus(
        function(response){
            if (response.session) { 
                alert(response.session.access_token);
                //This correctly shows the access token. <-----GOOD 
                token = response.session.access_token;
                continueScript();
            } 
            else{
                //Other stuff.  
            }
        }
);


function continueScript() {
      ....
      doSomeMoreFunctionalitiesWithToken();
      ....
}

function doSomeMoreFunctionalitiesWithToken() {
      alert(token);
}

たとえば、画面に「読み込み中...」インジケーターを表示し、それを削除して、getLoginStatus() がタスクを完了した、つまりトークンが設定された後に実際のコンテンツを表示することができます。

これがお役に立てば幸いです。

于 2011-07-05T22:45:24.823 に答える
1

FB._session.access_token式を使用して、他の場所からアクセス トークンを取得してみてください。

于 2011-07-05T23:43:57.767 に答える