AJAX调用Facebook API的时间

时间:2011-08-15 02:22:47

标签: javascript ajax facebook

所以我有一些代码,我通过他们的API获取登录用户的Facebook ID。看起来像这样:

var facebookId = "";
facebookId = getFBIdSafe();

获取它的方法调用如下所示:

function getFBIdSafe()
{
    FB.api('/me', function(response) {
        if (!response || response.error) {
            return "";
        } else {
            return response.id;
        }
    });
}

正在发生的事情是,我按照上面的说明调用了这个方法,然后去做其他的事情,其中​​一个是对我自己的服务器的AJAX调用,传递了{set}的facebookId。问题是,它从未设置过。

我不想在代码中放置FB.api个调用,这样我就可以将其他代码放入成功回调中。我怎样才能干净利落地处理这个问题,并确保在我打电话给自己的服务器之前这个ID总是回来?

P.S。它不会执行此代码,除非用户首先登录到Facebook - 该检查是基于网站上的状态标记进行的 - 所以这不是同一个问题。

1 个答案:

答案 0 :(得分:1)

如果你想要的是避免检索当前用户的FB Id,那么你应该延迟所有服务器调用,直到获得id。如果你有jQuery或者愿意使用jQuery,你可以使用$.Deferred()推迟所有服务器调用,直到检索到FB Id。我建议做一些事情:

var FBIdLoad = $.Deferred();
function getFBIdSafe()
{
    FB.api('/me', function(response) {
        if (!response || response.error) {
            FBIdLoad.resolveWith("");
        } else {
            FBIdLoad.resolveWith(response.id);
        }
    });
}

[...]

FBIdLoad.done(function(FBId){
  /* Your server call with the Id */
}

如果对象已经解析(当FB.Api以id响应时),则会自动执行传递给FBIdLoad.done的所有函数,并始终收到请求的Id。

希望它有所帮助,