Как получить доступ к возвращаемым данным jQuery.ajax()

#javascript #jquery #json

#javascript #jquery #json

Вопрос:

Я использую следующий код для выполнения AJAX-вызова:

   $.ajax({
    url: href,
    type: 'POST',
    data: {},
    dataType: "json",
    error: function(req, resulttype, exc)
    {
      // do error handling
    },
    success: function(data)
    {
      for (var tracklist in data) {
        console.log(tracklist.name); // undefined
        console.log(tracklist['name']); // undefined
      }
    }
  });
  

Что я возвращаю к запросу AJAX, так это:

 {"5":{"id":5,"name":"2 tracks","count":2},"4":{"id":4,"name":"ddddd","count":1},"7":{"id":7,"name":"Final test","count":2}}
  

Что я хотел бы знать, так это как получить доступ к атрибуту name текущего списка дорожек.

Ответ №1:

Вы должны использовать

 console.log(data[tracklist].name);
  

вместо

 console.log(tracklist.name);
  

Ответ №2:

Если вы хотите выполнить итерацию по этим объектам, было бы лучше, если бы вы вернули массив:

 [{"id":5,"name":"2 tracks","count":2},{"id":4,"name":"ddddd","count":1},{"id":7,"name":"Final test","count":2}]
  

Затем вы могли бы использовать цикл for, аналогичный тому, что вы пытались:

   for (var tracklist in data) {
    console.log(data[tracklist].id);
    console.log(data[tracklist].name);
  }
  

Ответ №3:

В цикле:

 for (var tracklist in data) {
  console.log(tracklist.name); // undefined
  console.log(tracklist['name']); // undefined
}
  

tracklist это ключ каждого элемента, а не его значение.

Таким образом:

 for (var tracklist in data) {
  console.log(data[tracklist].name); // ... or ...
  console.log(data[tracklist]['name']);
}