Facebook Javascript API发送两个请求

时间:2012-07-25 18:40:34

标签: javascript facebook facebook-graph-api facebook-javascript-sdk

在我的应用程序中,我有一个像这样的函数:

getProfile = function() {
  FB.api('/me', function(response) {
    console.log(response);
  });
  return false;
};

通过JavaScript从Facebook Graph API请求“我”对象,当我将它附加到常规链接的onClick事件或直接从控制台调用它时它按预期工作,但是当我尝试调用它时从Facebook登录按钮:

  <fb:login-button onlogin="getProfile()">
    Get Profile
  </fb:login-button>

只有当我退出Facebook并随后通过对话框登录时,才能得到预期的响应;如果我在登录时单击按钮,我会得到:

Two identical requests to the "me" object.

如果我将响应推送到浏览器:

getProfile = function() {
  FB.api('/me', function(response) {
    console.log(response);
    var
      profile = document.getElementById('profile'),
      p = document.createElement('p');
    p.innerHTML = response.first_name;
    profile.appendChild(p);
  });
  return false;
};

当然,我的名字中有两段。

有人能发现我做错了吗?到目前为止,我的谷歌搜索让我确信这与SDK处理登录事件的方式有关(在每个页面加载时触发)但我无法弄清楚我应该如何在应用程序代码中考虑到这一点。

1 个答案:

答案 0 :(得分:4)

我相信当您加载页面时,onlogin事件会因您登录Facebook而触发。然后,当您的用户单击该按钮时,它也会触发该事件。如果您没有首先登录,则onlogin事件不会在加载时触发。

更新:为了避免这种情况,只是不要将getProfile挂钩到onlogin事件,除非在基于FB.getLoginStatus方法的if语句中http://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/简单地说,如果您已登录,请不要附加onlogin事件,否则在onlogin事件上执行FB.Event.subscribe http://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/,只要用户通过XFBML生成的登录按钮登录,您的方法就会运行。

FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
  //print the response data into the paragraph here
} else if (response.status === 'not_authorized') {
  // the user is logged in to Facebook, 
  // but has not authenticated your app
  FB.event.subscribe( 'auth.login', function(){
    getProfile();
  });
} else {
  // the user isn't logged in to Facebook.
}
});