如何在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>
答案 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);