Facebook graph api 从函数返回FB.getLoginStatus
当我运行以下脚本(仅相关代码段)而不是返回有效的fb.getLoginStatus时,我不明白为什么Facebook graph api 从函数返回FB.getLoginStatus,facebook-graph-api,facebook,Facebook Graph Api,Facebook,当我运行以下脚本(仅相关代码段)而不是返回有效的fb.getLoginStatus时,我不明白为什么fb\u login\u status\u response在控制台中返回“未捕获引用错误:fb\u login\u status未定义”。如有任何想法/反馈,将不胜感激。谢谢 <script> function load_fb(){ window.fbAsyncInit = function() { FB.init({
fb\u login\u status\u response
在控制台中返回“未捕获引用错误:fb\u login\u status未定义”。如有任何想法/反馈,将不胜感激。谢谢
<script>
function load_fb(){
window.fbAsyncInit = function() {
FB.init({
appId : '251975954634982', // App ID
//channelURL : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
oauth : true, // enable OAuth 2.0
xfbml : true // parse XFBML
}); // closes FB.init
fb_login_status = FB.getLoginStatus(function(response){
console.log("FB.getLoginStatus: ", response.status);
// NOTE - the line above does log an accurate response.status in the console!
response.status;
// NOTE - I've tried putting the return statement here, but that doesn't work.
});
};
return fb_login_status; // NOTE - this return statement is what generates the "Uncaught ReferenceError:..." in console
}
// Load FB SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
$(document).ready(function(){
sb_session_status = checkIfSignedIn();
if (sb_session_status == "valid"){
$(".loggedIn").css("display","block");
// Block of code for logged-in users goes here
}
else{
fb_login_status_response = load_fb();
console.log("fb_login_status_response: ", fb_login_status_response);
// NOTE - else clause here to check if user signed-in via facebook
}
});
</script>
函数加载_fb(){
window.fbAsyninit=函数(){
FB.init({
appId:'25197545634982',//应用ID
//channelURL:'//WWW.YOUR_DOMAIN.COM/channel.html',//频道文件
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
oauth:true,//启用oauth 2.0
xfbml:true//解析xfbml
});//关闭FB.init
fb_login_status=fb.getLoginStatus(函数(响应){
console.log(“FB.getLoginStatus:,response.status”);
//注意-上面的行在控制台中记录了准确的响应。状态!
答复.状况;
//注意-我试着把return语句放在这里,但这不起作用。
});
};
return fb_login_status;//注意-此return语句在控制台中生成“uncaughtreferenceerror:…”
}
//异步加载FBSDK
(职能(d){
var js,id='facebook jssdk';if(d.getElementById(id)){return;}
js=d.createElement('script');js.id=id;js.async=true;
js.src=“//connect.facebook.net/en_US/all.js”;
d、 getElementsByTagName('head')[0].appendChild(js);
}(文件);
$(文档).ready(函数(){
sb_session_status=checkIfSignedIn();
如果(sb_会话_状态==“有效”){
$(“.loggedIn”).css(“显示”、“块”);
//登录用户的代码块位于此处
}
否则{
fb_登录_状态_响应=加载_fb();
log(“FBU登录状态响应:”,fb登录状态响应);
//注意-此处的else子句用于检查用户是否通过facebook登录
}
});
由于FB.getLoginStatus()
调用是异步(非同步)的,因此您需要将回调函数传递给checkIfSignedIn()
函数,以便可以运行它。见:
非常有用。非常感谢。我还没有机会在我的程序中测试它,但是你的解释很有道理。我会在一切正常后再确认。
var checkIfSignedIn = function(callbackFn) {
FB.getLoginStatus(function(response){
console.log("FB.getLoginStatus: ", response.status);
if($.isFunction(callbackFn)) {
callbackFn(response.status=="connected" ? "valid" : "other");
}
});
};
$(document).ready(function() {
checkIfSignedIn(function(sb_session_status){
if (sb_session_status == "valid"){
// DO SOMETHING with the logged in user
$(".loggedIn").css("display","block");
} else {
// DO SOMETHING to get the user logged in
}
});
});