jQuery .each () всегда возвращает Не удается прочитать свойство 'имя' из неопределенного - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь отобразить результаты поиска с помощью метода jQuery .each(). К сожалению, он всегда выдает undefined, хотя я определил его в своем массиве.

Мой JSON выглядит так:

{
     "count":2,
     "results":[
             {
                 "title":"AirMech\u00ae Arena",
                 "releasedate":"2015-05-05T00:00:00Z",
                 "icon":""
             },
             {
                 "title":"Game Title 2",
                 "releasedate":"2015-05-05T00:00:00Z",
                 "icon":""
             },
             {
                 "title":"Game Title 3",
                 "releasedate":"2015-05-05T00:00:00Z",
                 "icon":""
             },
      ]
}

А потом я пытаюсь сделать каждый так:

$.each(results, function(index, value) {
    $("#search-results").append(value["results"]["name"]);
});

Я пробовал value["results"][0]["name"], value[0]["results"]["name"], value[0]["results"][0]["name"]

И всегда кажется, что возвращается неопределенная ошибка, независимо от того, что я пытаюсь.

В чем может быть причина?


Обновленный код

            $.each(results, function(index, value) {
                $("#search-results").append(value["title"]);
                alert(value["title"]); // alerts undefined
            });

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Как я вижу ваш объект Json, если вы внимательно прочитали его, вы пытаетесь получить доступ к ключу results , а затем в results у вас есть только три подключа, которые

  • название
  • ReleaseDate
  • значок

Я не могу найти ключ имени в этом, но во время доступа вы пишете:

value["results"]["name"]

Как вы сможете получить доступ к ключу name , если его нет в объекте?

Если вы ищете заголовок:

results[0].title
results[0].releasedate
results[0]. icon

results[1].title
results[1].releasedate
results[1]. icon

Я думаю, это поможет вам и прояснит вашу логику. Так что в вашем цикле это будет:

$.each(results, function(index, value) {
    $("#search-results").append(value.title);
    $("#search-results").append(value.releasedate);
    $("#search-results").append(value.icon);
});
0 голосов
/ 02 июля 2018

В вашем объекте нет клавиши name. Вместо этого вы, вероятно, ищете title. Кроме того, вы включаете results, поэтому value в каждой функции равно results. Нет results.results, поэтому возвращалось undefined.

Обновлено, чтобы присвоить ваш объект переменной с именем myObject.

var myObject = {
     "count":2,
     "results":[
             {
                 "title":"AirMech\u00ae Arena",
                 "releasedate":"2015-05-05T00:00:00Z",
                 "icon":""
             },
             {
                 "title":"Game Title 2",
                 "releasedate":"2015-05-05T00:00:00Z",
                 "icon":""
             },
             {
                 "title":"Game Title 3",
                 "releasedate":"2015-05-05T00:00:00Z",
                 "icon":""
             },
      ]
}

Это должно работать для вас:

$.each(myObject.results, function(index, value) {
    $("#search-results").append(value.title); // <-- you have title not name
});

Если вы хотите получить ключи, используя синтаксис, который вы использовали, это также будет работать:

$.each(myObject.results, function(index, value) {
    $("#search-results").append(value["title"]); // <-- you have title not name
});

Ознакомьтесь с рабочей версией: https://codepen.io/mccambridge/pen/pKYbWv

...