如何在facebook init函数javascript中设置标志?

时间:2012-11-13 09:48:59

标签: javascript facebook

我有一个示例代码:

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函数中设置标志?如果没有,如何解决?

2 个答案:

答案 0 :(得分:2)

我建议你做的是使用回调(可能是匿名的),因为函数fbAsyncInitgetLoginStatus函数都是异步的(这意味着它们不会立即返回一些东西) - 他们必须先打电话给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函数中的代码将被稍后调用。