Javascript jQuery вызывает API для заполнения таблицы, но получает неопределенный вызов для конкретного объекта
Таким образом, проблема, с которой я, похоже, сталкиваюсь, заключается в том, что когда я заполняю свою таблицу, объект discogsObjects.year заполняет мою таблицу последовательно "undefined", несмотря на тот факт, что когда я вызываю ее в devtools, он возвращает значения лет, вызванных из API. Мой формат соответствует коду, поэтому я не уверен, в чем может быть проблема...
Спасибо!
var discogsObjects = {
title: [],
label: [],
year: [],
};
$(".artistform").submit(function(event){
event.preventDefault();
var band = ($("#userInput").val());
var url = "https://api.discogs.com/database/search?q=" + band + "&key=olnzRAzKsxiVlgocWNCH&secret=RPCwqvPXDmFkHHNzDePPKIcMsHRmNUIK"
$.ajax({
url: url,
type: "GET",
dataType: "json",
success: (data)=> {
console.log(data.results);
for (i = 0; i<21; i++) {
for(var key in data.results[i]){
//if (key === "id") idArr.push(data.results[i][key]);
if (key === "title") discogsObjects.title.push(data.results[i][key]);
if (key === "label") discogsObjects.label.push(data.results[i][key]);
if (key === "year") discogsObjects.year.push(data.results[i][key]);
}
//$thead(.hidden).show()
// $('#resultsHead').append('<tr><td>Year of Release</td><td>Artist Release</td><td>Record Label</td></tr>');
$('#resultsTable').append('<tr><td>'+discogsObjects.title[i]+'</td><td>'+discogsObjects.year[i]+'</td><td>'+discogsObjects.label[0]+'</td></tr>');
}
}
});
});
1 ответ
Первый объект, возвращаемый в массиве "results", является описанием полосы, которая не имеет year
атрибут, поэтому первая итерация вашего цикла for не заполняет year
массив в discogsObjects
объект и, следовательно, на каждой последующей итерации undefined
будет добавлен в DOM, потому что он выключен одним.
Например, используя "Maroon 5", первый возвращенный объект будет:
{
"thumb":"https://api-img.discogs.com/gcuqJ3Ni4_2F_F_35xU7anju50Q=/150x150/smart/filters:strip_icc():format(jpeg):mode_rgb():quality(40)/discogs-images/A-192151-1452146008-4372.jpeg.jpg",
"title":"Maroon 5",
"uri":"/artist/192151-Maroon-5",
"resource_url":"https://api.discogs.com/artists/192151",
"type":"artist",
"id":192151
}
Так что ваш цикл for не найдет ключ с именем "year", и discogsObject.year
будет пустым. Потом добавляешь discogsObject.year[i]
когда i = 0
который undefined
, Затем, я увеличивается, и год обнаруживается в следующем объекте, помещая его в массив year, но при добавлении его в DOM вы пытаетесь сделать discogsObject.year[i]
когда i = 1
, но discogsObject.year.length = 1
так что это undefined
,