Facebook SDK,函数被调用两次

Facebook SDK, function is getting called twice

我正在尝试在我的网站上实现 facebook 登录按钮,到目前为止一切顺利,但我遇到了问题。 我有这个 facebook sdk js:

  function statusChangeCallback(response) {
    console.log(response);
    if (response.status === 'connected') {
      getUser();
    } else {
      document.getElementById('status').innerHTML = 'Please log ' +
        'into this app.';}
      }
  function checkLoginState() {
    FB.getLoginStatus(function(response) {
      statusChangeCallback(response);
    });
  }
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'XXXXX',
      cookie     : true,  // enable cookies to allow the server to access 
      status     : true,  // the session
      xfbml      : true,  // parse social plugins on this page
      version    : 'v2.8' // use graph api version 2.8
    });
    FB.getLoginStatus(function(response) {
      statusChangeCallback(response);
    });
  };

  (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 = "https://connect.facebook.net/en_US/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
  }(document, 'script', 'facebook-jssdk'));

  function getUser() {
    FB.api('/me?fields=email,name,birthday,gender', function(response) { 
      var ufd=JSON.stringify(response);
        $.ajax({
      type: "POST",
      url: "/fb-callback.php",
      data: {ud:ufd},
      success: function(msg) {
    if(msg!=""){
      alert("Successfully Logged In !"+msg);
    }
    else{
    alert("Some Error");
    }
 }
});  
    });
  }

在 getUser() 函数 ajax 中被调用了两次,或者函数 getUser() 本身被调用了两次。 我搜索了很多答案,但没有一个与我的问题相关。

如果有人已经使用 Facebook 登录到您的应用程序,那么由于 window.fbAsyncInit

中的以下块,statusChangeCallback(response) 将被调用一次
FB.getLoginStatus(function(response) {
  statusChangeCallback(response);
});

现在,当您使用页面上的 Facebook 登录按钮登录时,将调用 checkLoginState() 并再次调用 statusChangeCallback(response) 方法,因此您会看到 ajax 调用被触发了两次.要解决此问题,您可以执行以下任一操作

  1. 如果 response.status === 'connected' 即用户自动登录,则隐藏登录按钮。
  2. 从 init 中删除 FB.getLoginStatus 检查并要求用户在每次首次访问您的页面时通过单击登录按钮登录您的应用程序。

在 getUser 函数中有两个函数会触发 ajax 请求,第一个 FB.api('/me?fields=email,name,b 和另一个回调函数

var ufd=JSON.stringify(response); $.ajax({ type: "POST",

显然它会发起两个 ajax 请求