Почему я не могу получить доступ к свойствам json с помощью оператора dot (.) при передаче переменной через $.getjson()

#javascript #jquery #json

#javascript #jquery — jquery — запрос #json #jquery

Вопрос:

У меня есть $ getJSON (), через который я хочу передать переменную, но я всегда получаю undefined в журнале консоли.

Я делал это раньше, но, похоже, я просто не могу понять, почему это не работает.

Будем признательны за любую помощь.

вот мой пример

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

Комментарии:

1. в какой переменной вы получаете undefined ?

2. можете ли вы попробовать зарегистрировать объект ‘json’, который вы получаете внутри функции, и посмотреть, существует ли внутри json свойство с именем useridno? похоже, что внутри объекта нет свойства с именем useridno.

3. Разве у Гарри, Джеймса и Бена не должны быть запятые между ними?

4. если я console.log(json), я получаю все имя, как обычно.

5. Похоже, то, что вы пытаетесь здесь сделать, json[usersidno] , не json.usersidno . Вы хотите получить свойство, имя которого соответствует значению в usersidno , а не свойство с именем usersidno .

Ответ №1:

Когда вы хотите получить доступ к свойству объекта (JSON) динамически (используя переменную или выражение), вы должны использовать обозначение в квадратных скобках.

[your expression or variable inside square brackets] . то есть, json[useridno]

  var usersidno = $("#hiddenid").html();
 $.getJSON(
   "http://localhost/example/file.json",
   function(json) {
      console.log(json[usersidno]); // try to use square brackets
   });
  

Ответ №2:

Это рабочий пример вашей проблемы, я использовал api, который возвращает json, вы можете использовать [] аннотацию для доступа к свойствам объекта.

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

Объяснение:

 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
  

Взгляните на документы mdn