我有一个示例代码:
function initFB() {
var flag;
window.fbAsyncInit = function() {
FB.init({appId: 'zzzzzz', status: true, cookie: true, xfbml: true});
var flag;
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
flag = 1;
} else if (response.status === 'not_authorized') {
flag = 2;
} else {
flag = 3;
}
});
};
return flag;
}
var flag = initFB();
alert(flag);
=>结果是undefined
,无法在facebook函数中设置标志?如果没有,如何解决?
答案 0 :(得分:2)
我建议你做的是使用回调(可能是匿名的),因为函数fbAsyncInit
和getLoginStatus
函数都是异步的(这意味着它们不会立即返回一些东西) - 他们必须先打电话给facebook,在他们这样做之后,他们会打电话给他们自己的回调(function() {
部分)。
function initFB(callback) {
window.fbAsyncInit = function() {
FB.init({appId: 'zzzzzz', status: true, cookie: true, xfbml: true});
FB.getLoginStatus(function(response) {
var flag;
if (response.status === 'connected') {
flag = 1;
} else if (response.status === 'not_authorized') {
flag = 2;
} else {
flag = 3;
}
callback(flag);
/* This will call the anonymous function specified as
"callback" with a parameter of whatever is in the
"flag" variable. */
});
};
}
/* Here we use an anonymous function as a callback of
when getLoginStatus has gotten it's return value */
initFB(function(flag) {
alert(flag);
});
答案 1 :(得分:0)
这是范围和同步问题。第二次定义“flag”时它只在fbAsyncInit函数内部可见,没有连接到外部的“flag”变量。此外,当外部的“flag”已经返回时,fbAsyncInit函数中的代码将被稍后调用。