J'ai un $getJSON() que je veux transmettre à une variable, mais j'obtiens toujours undefined dans le journal de la console.

Je l'ai déjà fait, je n'arrive pas à comprendre pourquoi cela ne fonctionne pas.

Toute aide serait appréciée.

Voici mon exemple

{
    "harry": {
        "example": "test",
        "example1": "test",
    }
    "james": {
        "example": "test",
        "example1": "test",
    }
    "ben": {
        "example": "test",
        "example1": "test",
    }
}
  var usersidno = $("#hiddenid").html();
  $.getJSON(
  "http://localhost/example/file.json",
  function(json) {
  console.log(json.usersidno);
  });
<div id="hiddenid">harry</div>
3
Mic 7 mars 2019 à 10:01

2 réponses

Meilleure réponse

Lorsque vous souhaitez accéder à la propriété d'un objet (JSON) de manière dynamique (à l'aide d'une variable ou d'une expression), vous devez utiliser la notation crochets.

[your expression or variable inside square brackets]. c'est-à-dire json[useridno]

 var usersidno = $("#hiddenid").html();
 $.getJSON(
   "http://localhost/example/file.json",
   function(json) {
      console.log(json[usersidno]); // try to use square brackets
   });
3
Bear Nithi 7 mars 2019 à 07:17

Ceci est un exemple fonctionnel de votre problème. J'ai utilisé une API qui renvoie un json. Vous pouvez utiliser l'annotation [] pour accéder aux propriétés de l'objet.

$(document).ready(function(){

var user = $("#hiddenid").html()
console.log(typeof user)

 $.getJSON(
  "https://jsonplaceholder.typicode.com/todos/1",
  function(json) {
  let js=JSON.parse(JSON.stringify(json))
 console.log(js[user]);
  console.log(js.user);//undefined
  console.log(js)
 
  });

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="hiddenid">userId</div>

Explication:

var userid = 'userId';
console.log(x.userid); // it looks for x.userid, which throws undefined,if it does'nt exists
console.log(x[userid]); // looks for x['userId'] which it will find

Consultez mdn docs

0
Cody Gray 7 mars 2019 à 07:50