Javascript AJAX调用Facebook API的时间安排
所以我有一些代码,可以通过API获取登录用户的Facebook ID。看起来是这样的: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 {
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
希望有帮助