FB.api не работает каждый раз - PullRequest
0 голосов
/ 14 ноября 2011

Я новичок в Facebook Javascript SDK. Я пытаюсь создать приложение, используя этот API. Но везет, пока использует метод FB.api. Почему-то мой метод FB.api каждый раз не работает должным образом. Иногда он будет давать ответ (я просто получаю доступ к response.name), а в другой раз он не будет вызван должным образом.

window.fbAsyncInit = function() {
FB.init({
  appId      : 'my_app_id', // App ID
  status     : true, // check login status
  cookie     : true, // enable cookies to allow the server to access the session
  oauth      : true, // enable OAuth 2.0
  xfbml      : true  // parse XFBML
});
FB.getLoginStatus(function(response) {
  if (response.authResponse) {
   alert('user is:'+response.status); 
   userId = response.authResponse.userID;
   FB.api('/me',function(response) {
   alert('Inside FB.api function');
   document.getElementById("userInfo").innerHTML = 'Welcome <img src="https://graph.facebook.com/'+ response.id + '/picture" style="margin-right:5px"/>' +response.name + '!';
    });
    }
});
};

Другие методы FB.ui и FB.getLoginStatus и кнопка «Нравится» в Facebook работают, как и ожидалось, но только FB.api работает не так, как другие. Не почему? Пожалуйста, помогите мне определить проблему.

Ответы [ 3 ]

2 голосов
/ 11 апреля 2013

У меня была точно такая же проблема.Этот ответ указал мне правильное направление:

FB.api не работает при вызове сразу после FB.init

Чтобы решить мою проблему, мне пришлось подписатьсяправильное событие.В моем случае это было «auth.authResponseChange» после FB.init

FB.Event.subscribe('auth.authResponseChange', function(){
    FB.api('/me',function(r){
    console.log(r.id);
     if (!r || r.error) {
        alert('Error occured');
      } else {
        alert(r.name);
      }         
    });
});
0 голосов
/ 26 ноября 2013

У меня была такая же проблема.FB.api просто перестал работать тихо в какой-то момент в моем приложении.Я заметил, что это из-за DOM-манипуляции:

<div id="fb-root"></div>

Либо дублирование, либо что-то еще.Вы должны проверить эту точку.Похоже, проблема Йохана Стридома.

0 голосов
/ 14 ноября 2011

Этот код отлично работает для меня, но вы можете попробовать переименовать переменные ответа. Внутри обратного вызова FB.api у вас есть две переменные ответа, которые, несомненно, вызовут проблемы. Попробуйте изменить их и посмотреть, если вы получите другие результаты.

FB.getLoginStatus(function(loginResponse) {
  if (loginResponse.authResponse) {
   alert('user is:'+loginResponse.status); 
   userId = loginResponse.authResponse.userID;
   FB.api('/me',function(apiResponse) {
   alert('Inside FB.api function');
   document.getElementById("userInfo").innerHTML = 'Welcome <img src="https://graph.facebook.com/'+ apiResponse.id + '/picture" style="margin-right:5px"/>' +apiResponse.name + '!';
    });
    }
});

Возможно, на вашей странице есть что-то, влияющее на это. У вас есть ссылка на вашу страницу?

...