web-dev-qa-db-fra.com

TypeError non capturé: impossible de lire la propriété «nom» de non défini

J'ai essayé de récupérer des données en utilisant Facebook api dans des entrées de formulaire. Maintenant, tout s'est très bien passé jusqu'à ce que j'essaie de récupérer également l'emplacement de l'utilisateur actuel.

Si l'utilisateur actuel a partagé sa position (où il vit), je n'ai aucun problème. Cependant, si l'utilisateur n'a pas partagé sa position sur Facebook, je reçois une erreur: Uncaught TypeError: Cannot read property 'name' of undefined

Voici le code que j'utilise. Si vous avez une idée de la façon de le résoudre, veuillez commenter ici :)

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

Sur cette ligne:

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

... vous vérifiez si response.location n'est pas la chaîne"undefined". Puisque undefined n'est pas la chaîne "undefined", la condition est vraie. Ensuite, vous essayez d'utiliser response.location.name et comme response.location est undefined, vous obtenez l'erreur.

Vous vouliez probablement dire:

if(response.location)

ou

if(typeof response.location !== 'undefined')
18
T.J. Crowder