javascript从函数中获取值

时间:2012-03-12 20:02:11

标签: javascript function

如何在function中获取令牌?我想把它从这个函数发送出去进行ajax处理。

<body>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
    var token;
    window.fbAsyncInit = function() {
        FB.init({ appId: 'XXXXXXXX',status: true,cookie: true,xfbml: true,oauth: true});
        FB.getLoginStatus(function(response) {
            if (response.authResponse){
                       if(response.status=="connected") {
                                token = response.authResponse.accessToken;
                       }
            }
        });
    };
    alert(token);//undefined
</script>
<div id="fb-root"></div>
</body>

5 个答案:

答案 0 :(得分:4)

您正在执行异步请求,该异步请求可能在您的警报执行时无法完成。要解决您的问题,只需在异步方法完成时调用函数:

var token;
window.fbAsyncInit = function() {
    FB.init({ appId: 'XXXXXXXX',status: true,cookie: true,xfbml: true,oauth: true});
    FB.getLoginStatus(function(response) {
        if (response.authResponse){
                   if(response.status=="connected") {
                            token = response.authResponse.accessToken;
                            asyncComplete();
                   }
        }
    });
};

function asyncComplete() {
    alert(token);
}

或者,只需传入值而不是使用token变量:

window.fbAsyncInit = function() {
    FB.init({ appId: 'XXXXXXXX',status: true,cookie: true,xfbml: true,oauth: true});
    FB.getLoginStatus(function(response) {
        if (response.authResponse){
                   if(response.status=="connected") {
                            asyncComplete(response.authResponse.accessToken);
                   }
        }
    });
};

function asyncComplete(token) {
    alert(token);
}

答案 1 :(得分:3)

它是一个异步调用,意味着调用了ur函数,并且脚本在执行下一个alert语句之前不会等待它返回,使得令牌值'undefined'存在。

你可以做的就是调用你想要调用的函数,

var token;
    window.fbAsyncInit = function() {
        FB.init({ appId: 'XXXXXXXX',status: true,cookie: true,xfbml: true,oauth: true});
        FB.getLoginStatus(function(response) {
            if (response.authResponse){
                       if(response.status=="connected") {
                                token = response.authResponse.accessToken;
                                alert(token);//should give correct value here
                                newFunction(token);
                       }
            }
        });
    };

答案 2 :(得分:0)

您没有初始化令牌,当您尝试初始化令牌时,您在if块中执行了此操作。所以你的一个if语句如果检查失败了。

答案 3 :(得分:0)

在此AJAX调用完成时调用您的函数...

if(response.status=="connected") {
    token = response.authResponse.accessToken;
    YourFunction(token);
}

答案 4 :(得分:0)

token变量是异步分配的,因此只有在将请求发送到Facebook进行验证并返回响应后才可用。如果您需要运行任何其他需要已经设置令牌的函数,请从以下行中调用它们:

token = response.authResponse.accessToken;
doSomeOtherFunction(token);