7

Qualcuno può dirmi come funziona esattamente l'API FB. Sembra essere una domanda di base, ma sono davvero confuso.API di Facebook come si chiama onlogin

Domanda: Ho onlogin(). Quando faccio clic sul pulsante di accesso, mi aspetto che chiami questa funzione. Ma nel codice ho incollato: vedo che il test di allerta viene stampato prima e che FB.api viene chiamato.

Quindi, sembra che onlogin sia chiamato prima, quindi l'API FB ... c'è un modo per chiamare questa funzione solo una volta.

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

     window.fbAsyncInit = function() { 
      FB.init({appId: 'XXX', status: true, cookie: true, xfbml: true}); 

     }; 
     (function() { 
     var e = document.createElement('script'); e.async = true; 
     e.src = document.location.protocol + 
      '//connect.facebook.net/en_US/all.js'; 
     document.getElementById('fb-root').appendChild(e); 
     }()); 

    function checkFacebookLogin() { 
    FB.api('/me', function(response) { 
     alert("Name: "+ response.name + "\nFirst name: "+ response.first_name + "ID: "+response.id); 
    }); 

    alert('test'); 

    } 

    </script> 


<p id="fb_login_button_1"><fb:login-button onlogin="checkFacebookLogin();" size="medium" scope="user_about_me">Sign in using Facebook</fb:login-button></p> 


</body>v 

Il mio problema principale è la funzione dovrebbe essere chiamata solo una volta .... ma viene chiamata due volte.

+0

'' click' e onclick' non appaiono nel codice che avete nella vostra domanda, rendendo difficile per risolvere il problema. – Trott

+0

Grazie per averlo indicato. Ho modificato la domanda. –

risposta

8
<body> 
     <div id="fb-root"></div> 
<script> 

     window.fbAsyncInit = function() { 
      FB.init({appId: 'XXX', status: true, cookie: true, xfbml: true}); 

     }; 
     (function() { 
     var e = document.createElement('script'); e.async = true; 
     e.src = document.location.protocol + 
      '//connect.facebook.net/en_US/all.js'; 
     document.getElementById('fb-root').appendChild(e); 
     }()); 

    function fetchUserDetail() 
    { 
     FB.api('/me', function(response) { 
       alert("Name: "+ response.name + "\nFirst name: "+ response.first_name + "ID: "+response.id); 
      }); 
    } 

    function checkFacebookLogin() 
    { 
     FB.getLoginStatus(function(response) { 
      if (response.status === 'connected') { 
      fetchUserDetail(); 
      } 
      else 
      { 
      initiateFBLogin(); 
      } 
     }); 
    } 

    function initiateFBLogin() 
    { 
     FB.login(function(response) { 
      fetchUserDetail(); 
     }); 
    } 
    </script> 


<input type="button" value="Sign in using Facebook" onclick="checkFacebookLogin();"/> 


</body> 
+0

Grazie a Purusottam, questo ha risolto il mio problema che non viene stampato 2 volte. Ma non vedo il pulsante colorato di FB ... In generale alla gente piace vedere quella finestra bluastra. perché stai usando il pulsante ": tipo mi manca che aspetto sia possibile con" fb: login-button " –

+0

usa il CSS per avere lo stesso aspetto del pulsante FB. Se questo risolve il tuo problema, contrassegnalo come rispondere in modo che in futuro possa aiutare gli altri –

+0

Risolto..so significa che non posso usare direttamente apis FB :( –

1

La chiamata di richiesta all'API FB è asincrona. Significa che una volta inviata la richiesta, il codice non aspetterà che la richiesta venga completata. Per questo motivo viene eseguito un test di avviso prima che venga restituita la chiamata all'API. Tutte le chiamate API FB sono asincrone, se si tenta di renderle sincrone, il browser si bloccherà.

Grazie Kaushik

+0

Grazie Kaushik. come posso essere sicuro che venga chiamato solo una volta .. Capisco che come hai detto se lo faccio in sincrono, si blocca .. come muoversi? anche perché il test di allerta viene chiamato due volte. Dato che è asincrono, dovrebbe chiamare solo una volta senza aspettare la risposta dell'FB? per favore, dimmi anche come farlo chiamare solo una volta –

+0

Ciao Pavan ... perché stai usando FB.api per verificare se l'utente ha effettuato l'accesso o meno. Basta usare la funzione FB.login. In secondo luogo, perché stai usando fb: login-button? se lo usi, probabilmente stai facendo casino con il plugin FB Social. Il mio suggerimento sarà semplicemente creare il pulsante HTML e quindi chiamare la funzione onclick. Per maggiori dettagli, fare riferimento a questo link. https://developers.facebook.com/docs/reference/javascript/FB.login/ –

+0

Grazie mille per la risposta. Sto guardando 2 cose che l'utente deve effettuare il login e poi voglio ottenere le informazioni dell'utente che ha effettuato l'accesso alla mia base dati. So sto usando FB.api. sì, è davvero incasinato con il pulsante. Puoi per favore farmi sapere cosa intendi e come usare che ... tutto ciò di cui ho bisogno è la validazione dovrebbe essere fatta da FB e voglio ottenere quelle informazioni utente registrate .... Come ho detto nell'esempio sopra, è in esecuzione due volte ... l'avviso delle informazioni dell'utente viene anche stampato due volte. Ancora non ho capito il ragionamento –