7

Próbowałem pobrać dane za pomocą facebook API w postaci danych wejściowych. Teraz wszystko poszło dobrze, dopóki nie spróbowałem pobrać lokalizacji bieżącego użytkownika.Uncaught TypeError: Nie można odczytać właściwości 'name' of undefined

Jeśli bieżący użytkownik udostępnił swoją lokalizację (Gdzie mieszka), to nie mam żadnych problemów. Jeśli jednak użytkownik nie udostępnił swojej lokalizacji na Facebooku, otrzymuję komunikat o błędzie: Uncaught TypeError: Cannot read property 'name' of undefined

Oto kod, którego używam. Jeśli masz jakiś pomysł jak go rozwiązać, prosimy o komentarz tutaj :)

<div id="fb-root"></div> 
<script> 
    // Additional JS functions here 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : '*******', // App ID 
     status  : true, // check login status 
     cookie  : true, // enable cookies to allow the server to access the session 
     xfbml  : true // parse XFBML 
    }); 

    FB.getLoginStatus(function(response) { 
    if (response.status === 'connected') { 

    FB.api('/me', function(response) { 
    document.getElementById("user_login").value="FB - " + response.username; 
    document.getElementById("user_email").value=response.email; 
    document.getElementById("first_name").value=response.first_name; 
    document.getElementById("last_name").value=response.last_name; 
    document.getElementById("user_url").value=response.link; 
    document.getElementById("fbid").value=response.id; 
    if(response.location !== 'undefined') 
    { 
    document.getElementById("location").value=response.location.name; 
    alert(response.location.name); 
    } 
    document.getElementById("registerform").submit(); 

}); 

    } else if (response.status === 'not_authorized') { 
    alert('error'); 
    } else { 
    alert('Please Log In!'); 
    } 
}); 

    }; 

    // Load the SDK Asynchronously 
    (function(d){ 
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    ref.parentNode.insertBefore(js, ref); 
    }(document)); 
</script> 

Odpowiedz

16

Na tej linii:

if(response.location !== 'undefined') 

... jesteś sprawdzenie czy response.location nie jest ciąg"undefined". Ponieważ undefined nie jest ciągiem "undefined", warunek jest prawdziwy. Następnie próbujesz użyć response.location.name i jako response.location jest undefined, pojawi się błąd.

Prawdopodobnie oznaczało albo:

if(response.location) 

lub

if(typeof response.location !== 'undefined') 
+0

Dzięki! Mój błąd ... –

+0

@DoDoron: Bez obaw, cieszę się, że pomogło! Łatwy błąd. –