2012-03-12 55 views
0

如何在function中获取令牌?我想把它从这个函数中发送出来以用于ajax处理。javascript从函数中获取值

<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

'token'定义外'fbAsyncInit'所以没有必要得到'fbAsyncInit'什么。当'token'被'fbAsyncInit'改变时,你是否希望能够采取行动? – 2012-03-12 20:04:54

回答

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); 
} 
0

您没有初始化令牌,当您试图初始化它时,您在if块中这样做。所以你的一个if语句没有通过if检查。

+0

那么如何初始化,以便我可以得到它? – 2012-03-12 20:06:04

+0

尽管'if'条件可能有问题,即使if是正确的,请求看起来是异步的,所以它仍然是'undefined',并且当前的alert()被放置。 – 2012-03-12 20:06:34

0

调用此AJAX调用完成时你的函数...

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

token变量被异步分配,所以只可获得一次请求已发送给Facebook进行验证和响应发送回。

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

它是一个异步调用,这意味着你的函数被调用,并且在执行下一个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); 
         } 
      } 
     }); 
    };