6

Mam problem z FB JS SDK.FB nie jest zdefiniowany javascript

Próbuję wykonać żądanie, aby uzyskać wartość fan_count węzła strony na Facebooku.

Oto mój kod z moim pliku html do organizmu:

<script> 
    window.fbAsyncInit = function() { 
     FB.init({ 
     appId  : 'your-app-id', 
     xfbml  : true, 
     version : 'v2.5' 
     }); 
    }; 

    (function(d, s, id){ 
     var js, fjs = d.getElementsByTagName(s)[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement(s); js.id = id; 
     js.src = "//connect.facebook.net/en_US/sdk.js"; 
     fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
</script> 

A kiedy używam tego na moim js aplikacji, używam go:

init(); 

function init() { 
    var id_fb = "l214.animaux"; 
    while (true) { 
    console.log("je suis ici"); 
    FB.api(
     '/' + id_fb + '/', 
     'GET', 
     {"fields":"fan_count"}, 
     function(response) { 
     alert(response.fan_count); 
     } 
    ); 
    } 
} 

Ale błąd jest że FB nie jest zdefiniowany. Jakieś sugestie ?

+0

Powinieneś 'init' jak zwrotnej URI lub dokonać Sue FB jest najpierw załadowane, niż init. –

+0

Muszę więc wywołać funkcję "init" na końcu funkcji 'fbAsyncInit'? Wydaje się, że to nie działa dla mnie :) –

+0

Zobacz: http://stackoverflow.com/questions/9184163/javascript-my-fbasyncinit-method-never-gets-called –

Odpowiedz

13

To byłoby poprawne, musisz użyć FB po zainicjowaniu JS SDK. Mając na uwadze powyższe, na pewno nie chcę zadzwonić FB.api w nieskończonej pętli, więc usunąłem tę część:

<script> 
    function init() { 
     FB.api(
      '/l214.animaux', 
      {"fields":"fan_count"}, 
      function(response) { 
      alert(response.fan_count); 
      } 
     ); 
    } 

    window.fbAsyncInit = function() { 
     FB.init({ 
     appId  : 'your-app-id', 
     xfbml  : true, 
     version : 'v2.5' 
     }); 

     init(); 
    }; 

    (function(d, s, id){ 
     var js, fjs = d.getElementsByTagName(s)[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement(s); js.id = id; 
     js.src = "//connect.facebook.net/en_US/sdk.js"; 
     fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
</script> 

upewnij się uruchomić to z rzeczywistego serwera, Nie wystarczy otworzyć swój HTML pliki w przeglądarce bez co najmniej lokalnego serwera.

+0

dzięki za odpowiedź, teraz nie mam tego błędu FB nie jest zdefiniowany. Ale funkcja init nigdy nie jest wywoływana. Przeszedłem twój kod i po prostu dodałem console.log w funkcji init na początku, a konsola przeglądarki pozostaje pusta. –

+0

Domyślam się, że js sdk nie zostanie załadowany. czy próbujesz tego z rzeczywistym serwerem sieciowym, czy po prostu otworzyłeś lokalnie plik html w przeglądarce? – luschn

+0

Otwieram to lokalnie z plikiem html –

2

Mam ten błąd, ponieważ piszę kod init w niezależnym pliku js, więc oczywiście FB nie jest zdefiniowany, ponieważ powinien być window.FB.

mój kod:

class FacebookUtil { 

    static init() { 
    // comes from https://developers.facebook.com/docs/javascript/quickstart 
    // notice FB should be window.FB 
    window.fbAsyncInit = function() { 
     window.FB.init({ 
     appId   : '...', 
     autoLogAppEvents : true, 
     xfbml   : true, 
     version   : 'v2.10' 
     }); 
     window.FB.AppEvents.logPageView(); 
    }; 

    (function(d, s, id){ 
     var js, fjs = d.getElementsByTagName(s)[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement(s); js.id = id; 
     js.src = "//connect.facebook.net/en_US/sdk.js"; 
     fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
    } 

    static login() { 
    window.FB.login(...) 
    } 

} 
Powiązane problemy