У меня есть внешний json, и я пытаюсь динамически получать значения json в моем javascript. Я могу получить значения первого уровня, и когда я пытаюсь получить объект массива, он показывает мой результат как неопределенный. Однако, когда я пытаюсь использовать этот «оповещение (data.siteAttribute[0].data[0].label);», он возвращает значение.
Вот следующее, что я пробовал
$(document).ready(function() {
$.getJSON("https://api.myjson.com/bins/naqzj", function(data) {
$(".test").html('<div class = "card-deck">');
var output = "";
for (var i in data.siteAttribute) {
output += "<div class='col-md-4 col-lg-3'><div class='card site-attribute-card'>";
output += "<span class='sticker sticker-rounded sticker-top-right'><span class='inline-item'><img height='50' width='50' src='"+data.siteAttribute[i].data.imageURL +"'/></span></span>";
output += "<div class='card-body'> <div class='card-row'>"
output + = "<div class='card-title text-truncate'>" + data.siteAttribute[i].data.label + "</div>";
output += "<div class='card-text'>" + data.siteAttribute[i].data.value + "</div>";
output + = "<div class='card-title text-truncate'>" + data.siteAttribute[i].data.operatinghours + "</div>";
output += "<div class='card-text'>" + data.siteAttribute[i].data.hours + "</div>";
output + = "<div class='card-title text-truncate'>" + data.siteAttribute[i].data.areaLabel + "</div>";
output += "<div class='card-text'>" + data.siteAttribute[i].data.areaValue + "</div>";
output + = "<div class='card-title text-truncate'>" + data.siteAttribute[i].dateModified + "</div>";
output + = "<div class='card-text'>" + data.siteAttribute[i].date + "</div>";
output += "</div></div>";
output += "<div class='card-footer'>";
output += "<div class='card-title text-truncate' title='Card Title'>"+ data.siteAttribute[i].name + "<span class='label label-tag label-category right'><span class='label-item label-item-expand'>"+data.siteAttribute[i].status+"</span></span></div>";
output += "<div class='card-links'><a href='/group/retail/site-management-form'>Edit</a><a class='right' href='#'>View</a></div></div>"
output += "</div></div>";
}
$(".test .card-deck").append(output);
$(".test .card-deck").append('</div>');
});
});<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div class = "test container">
</div>Вот мой образец рабочий пример для справки. Мне не хватает цикла для массива, и я понятия не имею, как это выяснить. Заранее спасибо!
Не могли бы вы помочь мне, как добавить второй цикл в скрипку?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


data.siteAttribute[i].data это массив
Таким образом, вы можете использовать data.siteAttribute[i].data[0], чтобы получить первый элемент, или вам также придется перебирать эти данные.
Спасибо за ваш вклад. Я не уверен, что использую его правильно. Вот что я пробовал в качестве второго цикла "for (var j in data.siteAttribute.data){..}", но ничего не показывает
Похоже, у вас проблемы только с вложенными циклами. Чтобы перебрать массив объектов, я предлагаю использовать Array.prototype.forEach. Чтобы упростить вашу демонстрацию, я удалил всю HTML-разметку и вложил два цикла forEach для анализа данных JSON. Пожалуйста, ознакомьтесь с демонстрацией и встроенными комментариями ниже:
$(document).ready(function() {
$.getJSON("https://api.myjson.com/bins/naqzj", function(result) {
// Loop over the top level attributes
result.siteAttribute.forEach(function(attr) {
// Loop over the attribute `data` array
attr.data.forEach(function(attrData) {
// For demo purposes, loop over the inner data object and print its props and values
for (var key in attrData) {
console.info(key, ' -> ', attrData[key]);
}
});
});
});
});<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>Это потрясающе! Большое спасибо за подробное объяснение.
У вас есть массив в вашем массиве, поэтому вам нужно 2 цикла