2012-01-19 3 views
0

올바른 FB를 반환하지 않고 fb_login_status_response이 다음 스크립트 (관련 스 니펫 만)를 실행할 때 콘솔에서 "Uncaught ReferenceError : fb_login_status가 정의되지 않음"을 반환하는 이유를 알 수 없습니다. getLoginStatus. 모든 아이디어/피드백은 높이 평가 될 것입니다. 감사! FB.getLoginStatus() 호출이 비동기 (syncronous되지 않음) 때문에함수에서 FB.getLoginStatus 반환

<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> 

답변

2

, 당신은 그것을 실행 할 수 있도록 checkIfSignedIn() 함수에 콜백 함수에 전달해야합니다. 참조 : https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/

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 
     } 

    }); 
}); 
+0

매우 유용합니다. 고맙습니다! 나는 아직 내 프로그램에서 그것을 테스트 할 기회가 없었지만, 당신의 설명은 많은 의미가 있습니다. 일단 일을하면 확인하겠습니다. –