2014-01-11 3 views
-1

Я создаю приложение PhoneGap, использующее логин FB. Я могу успешно войти в Facebook через приложение. Проблема, однако, в том, что я не могу хранить данные в переменных javascript сразу после входа пользователя в систему.Переменные FB.api не доступны сразу после входа в систему

Однако, если я выйду из системы и войду в систему, я смогу получить доступ к данным.

Логин:

FB.login(
    function(response) { 
     if (response.authResponse) { 
      var FBuserID = response.authResponse.userID; 

      alert(FBuserID); 

      $.ajax({ 
       url: '/user/' + FBuserID, 
       success: function(response) { 

        // calls FB.api functions 
        userInfo(); 

        alert(userName); 
        alert(profilePic); 

        }, 
       error: function() { 
        alert('error'); 
       } 
      }); 

     } else { 
      alert('No Success'); 
     } 
    }, 
    { scope: "email" } 
); 

USERINFO()

FB.api(
     '/me', function (response) { 
      var userName = response.name; 
     }); 
    FB.api(
     '/me/picture', 
     { 
      "redirect": false, 
      "type": "square" 
     }, 
     function (response) { 
      var profilePic = response.data.url; 
     }); 

Если добавить alert(userName); и alert(profilePic); внутри FB.api звонки, я могу увидеть данные, но они недоступны в функции $ .ajax. Является ли это простой проблемой, которую я пропускаю?

Примечание: Я также попытался использовать вызов $ .ajax в пределах функции FB.Event.subscribe('auth.login', function(response) без каких-либо успехов.

ответ

1

Это похоже на проблему с простым вопросом. Вы объявляете свои переменные внутри userInfo(), а затем пытаетесь получить к ним доступ в функции входа.

Ваша следующая проблема будет заключаться в том, что эти вызовы скорее всего асинхронны. Итак, как вы заявили, вы можете использовать функцию предупреждения в функциях api и видеть данные. Все, что вы хотите сделать с данными ответа, должно быть выполнено в рамках этих функций успеха, поэтому вам понадобится примерно следующее:

FB.api(
    '/me', function (response) { 
     doSomethingWithUsername(response.name); 
}); 
FB.api(
    '/me/picture', 
    { 
     "redirect": false, 
     "type": "square" 
    }, 
    function (response) { 
     doSomethingWithProfilePic(response.data.url); 
}); 
Смежные вопросы