7

¿Alguien me puede decir cómo funciona exactamente la API de FB? Parece ser una pregunta básica, pero estoy realmente confundido.facebook API cómo se llama onlogin

Pregunta: Tengo onlogin(). Cuando hago clic en el botón de inicio de sesión, espero que llame a esta función. Pero en el código que pegué: veo que primero se imprime la prueba de alerta y luego se llama al FB.api.

Por lo tanto, parece que primero se llama onlogin, luego la API de FB ... ¿hay alguna manera de llamar a esta función solo una vez?

<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 

Mi principal problema es la función debe ser llamada una sola vez .... pero se está haciendo llama dos veces.

+0

'' click' y onclick' no aparecen en el código que tiene en su pregunta, por lo que es difícil de solucionar el problema. – Trott

+0

Gracias por señalarlo. He editado la pregunta. –

Respuesta

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

Gracias Purusottam, esto resuelve mi problema, no se imprime 2 veces. Pero no veo el botón de color FB ... En general, a la gente le gusta ver esa ventana azulada. porque está utilizando el "botón: escriba me falta ese aspecto y la sensación es posible con" fb: botón de inicio de sesión " –

+0

use CSS para tener el mismo aspecto que el botón FB. Si esto resuelve su problema, márquelo como un respuesta para que en el futuro pueda ayudar a otros –

+0

Se resolvió ... lo que significa que no puedo usar FB apis directamente :( –

1

Solicitar llamada a FB La API es asincrónica. Significa que una vez que se envía la solicitud, el código no esperará a que se complete la solicitud. Debido a esto, obtienes una prueba de alerta antes de que se devuelva la llamada API. Todas las llamadas a la API de FB son asincrónicas, si intentas hacerlas sincrónicas, tu navegador se bloqueará.

Gracias Kaushik

+0

Gracias Kaushik. ¿Cómo puedo asegurarme de que se llame solo una vez? ... Entiendo que, como dijiste, si lo hago sincrónico, se cuelga ... ¿Cómo puedo moverte? también por qué la prueba de alerta se llama dos veces. Como es asíncrono, ¿debería llamar solo una vez sin esperar la respuesta del FB? por favor también dígame cómo hacer que se llame solo una vez –

+0

Hola Pavan ... por qué está usando FB.api para verificar si el usuario está conectado O no. Simplemente use la función FB.login. En segundo lugar, ¿por qué está utilizando fb: botón de inicio de sesión? si usas esto, probablemente estés arruinando el plugin de FB Social. Mi sugerencia será simplemente crear el botón HTML y luego hacer clic en llamar a su función. Para más detalles, consulte este enlace. https://developers.facebook.com/docs/reference/javascript/FB.login/ –

+0

Muchas gracias por la respuesta. Estoy buscando 2 cosas para que el usuario inicie sesión y luego quiero obtener la información del usuario que inició sesión en mi base de datos. Así que estoy usando FB.api. sí, está realmente mal con el botón. ¿Puede decirme qué quiere decir y cómo usarlo? Todo lo que necesito es que FB realice la validación y quiero que la información del usuario se registre ... Como dije en el ejemplo anterior, se está ejecutando dos veces ... de hecho, la alerta de la información del usuario también se imprimió dos veces ... Todavía no entendí el razonamiento –