2013-05-23 5 views
0

Im успешно работать FB.Event.subscribe и может выводить uid и accesstoken внутри этой функции - однако им интересно, как я бы идти о доступе к uid и accesstoken из в основном где-нибудь?Как получить доступ к uid + accesstoken за пределами FB.Event.subscribe?

Моя первая мысль была, что мне нужно, чтобы объявить глобальный идентификатор пользователя и маркер доступа вар вне функции - однако я не имел никакой удачи с этим до сих пор - при попытке вывести глобальные переменные Я просто undefined

Мой код только после стартового <body> тега:

<body> 
<div id="fb-root"></div> 
<script> 
//Declaring global var for uid and token 
var uid; 
var accessToken; 

$(document).ready(function(){ 

    function facebookReady(){ 
    FB.init({ 
     appId  : '357646666347166', // App ID 
     channelUrl : '//localhost/channel.html', // Channel File 
     status  : true, // check login status 
     cookie  : true, // enable cookies to allow the server to access the session 
     xfbml  : true // parse XFBML 
     }); 

    $(document).trigger("facebook:ready"); 
    } 

    if(window.FB) { 
    facebookReady(); 
    } else { 
    window.fbAsyncInit = facebookReady; 
    } 
}); 

    // Load the SDK asynchronously 
    (function(d){ 
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    ref.parentNode.insertBefore(js, ref); 
    }(document)); 
</script> 

Мой код помещается как раз перед закрывающим </body> тега»- это также, где я пытаюсь получить доступ к глобальной UID и лексем:

<script> 
$(document).on("facebook:ready", null, function(){ 

    FB.Event.subscribe('auth.authResponseChange', function(response) { 
     // Here we specify what we do with the response anytime this event occurs. 
     if (response.status === 'connected') { 
// Setting the uid + token 
     uid = response.authResponse.userID; 
     accessToken = response.authResponse.accessToken; 
// 
     } 
    }); 

     // Trying to access the UID OR TOKEN HERE: 
      console.log(uid); 
      console.log(accessToken); 
     // Trying to access the UID OR TOKEN HERE: 
}); 

</script> 
<!-- some included js file where I also want to access the UID --> 
<script src="js/animation.js"></script> 
+0

Это потому, что JS SDK работает асинхронно - данные еще не получены, когда вы пытаетесь получить к нему доступ. Как только функция обратного вызова присвоит значения переменным, вы сможете получить к ним доступ «из любого места», но не раньше. – CBroe

+0

Привет, cbroe, большое спасибо за ваш комментарий. Не могли бы вы предложить какие-либо предложения по подходу, которые позволили бы дождаться его установки до того, как я попытаюсь получить доступ к нему в рамках моего опубликованного кода? – user1231561

ответ

0

Я использую только для того, чтобы просто хранить мой доступ к Token в глобальной переменной, и он работал без проблем. Проблема здесь в том, что и uid, и accessToken имеют только область видимости в соответствующих тегах скриптов, поэтому uid и accessToken, объявленные в FB.Event.subscribe, являются их собственными значениями; отдельно от ваших «глобальных переменных», а область охвата ограничена FB.Event.subscribe.

Это, как говорится все, что вам нужно использовать это FB.getAccessToken()

Пример с использованием JQuery для получения данных через AJAX запроса:

$.ajax({ 
    url: "myQuery.php", 
    data: { accessToken: FB.getAccessToken() } 
}).done(function(data) { 
    doStuff(data); 
}); 

Вы также можете получить идентификаторы через FB.getUserID()

Смежные вопросы