Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AJAX调用Facebook API的时间安排_Javascript_Ajax_Facebook - Fatal编程技术网

Javascript AJAX调用Facebook API的时间安排

Javascript AJAX调用Facebook API的时间安排,javascript,ajax,facebook,Javascript,Ajax,Facebook,所以我有一些代码,可以通过API获取登录用户的Facebook ID。看起来是这样的: var facebookId = ""; facebookId = getFBIdSafe(); function getFBIdSafe() { FB.api('/me', function(response) { if (!response || response.error) { return ""; } else {

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

var facebookId = "";
facebookId = getFBIdSafe();
function getFBIdSafe()
{
    FB.api('/me', function(response) {
        if (!response || response.error) {
            return "";
        } else {
            return response.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总是返回


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

如果您希望避免检索当前用户的FB Id,那么您应该延迟所有服务器调用,直到获得Id为止。如果您有jQuery或愿意使用jQuery,则可以使用来推迟所有服务器调用,直到检索到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响应时),则传递给fbiload.done的所有函数将自动执行,并始终接收请求的id

希望有帮助