Вот мой json, который я создаю, но как я могу получить его в html-таблицу?
[
{
"basicColor":"blue",
"manufacturer": {
"name":"lavalamp.com"
},
"costBook": {
"unitPrice":10.99
},
"price":10.99
},
{
"basicColor":"red",
"manufacturer": {
"name":"volcaniclava.net"
},
"costBook": {
"unitPrice":15.99
},
"price":15.99
},
{
"basicColor":"purple",
"manufacturer": {},
"costBook": { "unitPrice":12.99 },
"price":12.99
},
{
"basicColor":"yellow",
"manufacturer": {},
"costBook":{"unitPrice":9.99},
"price":9.99
}
]
я пытался
$.getJSON('/home/jlpourt1/workspace/LavaLamp/lava.json', function(data) {
{
var tr;
for (var i = 0; i < data.length; i++) {
tr = $('<tr/>');
tr.append("<td>" + data[i].LavaLamp + "</td>");
tr.append("<td>" + data[i].Price + "</td>");
tr.append("<td>" + data[i].Color + "</td>");
tr.append("<td>" + data[i].CostBook + "</td>");
tr.append("<td>" + data[i].Manufacturer + "</td>");
$('table').append(tr);
}
};
}
но он, похоже, не работает
var tr = "";
for (var i = 0; i < data.length; i++) {
tr += "<tr>";
tr += "<td>" + data[i].manufacturer.name + "</td>";
tr += "<td>" + data[i].price + "</td>";
tr += "<td>" + data[i].basicColor + "</td>";
tr += "<td>" + data[i].costBook.unitPrice + "</td>";
tr += "</tr>";
}
$('table').append(tr);
Посмотрите, если свойство объекта называется costBook
вы не можете назвать это cost_book
или costbook
и т.д.,... надеюсь, что вы получили эту идею...
Если вам нравится, вы также можете сделать это таким образом, избегая новой строки с помощью \
:
var tr="", d=data;
for (var i=0; i<d.length; i++) {
tr += "<tr><td>"+ d[i].manufacturer.name +"</td> \
<td>"+ d[i].price +"</td> \
<td>"+ d[i].basicColor +"</td> \
<td>"+ d[i].costBook.unitPrice +"</td></tr>";
}
$('table').append(tr);
Похоже, что большинство ваших значений в главном объекте являются самими объектами, и, следовательно, значения не получают доступ правильно. Пример для производителя, вам нужно получить доступ к значению как таковому:
tr.append("<td>" + data[i].manufacturer.name + "</td>");
Также не кажется, что значение в вашем объекте для значения "LavaLamp"?
Попробуй это:
$( document ).ready(function()
{
// ...
$.getJSON('/home/jlpourt1/workspace/LavaLamp/lava.json', function(json)
{
$.each(json, function(i, x)
{
var $tr = $('<tr/>').appendTo('table');
$tr.append('<td>' + x.basicColor + '</td>');
$tr.append('<td>' + x.manufacturer['name'] + '</td>');
$tr.append('<td>' + x.costBook['unitPrice'] + '</td>');
$tr.append('<td>' + x.price + '</td>');
});
});
});
Существует много, что может быть сделано лучше о вашем коде, однако я могу показать вам более jQuery способ переписать и показать некоторые возможные ошибки.
Возможные проблемы:
$.getJSON('/home/jlpourt1/workspace/LavaLamp/lava.json', function(data) {
{ <- EXTRA BRACKET
var tr;
for (var i = 0; i < data.length; i++) {
tr = $('<tr/>');
THERE IS REALLY NO NEED TO REWRITE APPEND EVERYTIME
YOU CAN INSTEAD USE JQUERY CHAINING |OR|
SIMPLY USE A COMMA BETWEEN EACH ELEMENT TO APPEND
tr.append("<td>" + data[i].LavaLamp + "</td>"); <-- WHERE IS THIS PROPERTY COMING FROM?
tr.append("<td>" + data[i].Price + "</td>");
tr.append("<td>" + data[i].Color + "</td>");
THE FOLLOWING ARE OBJECTS AND CANT BE USED AS TEXT
tr.append("<td>" + data[i].CostBook + "</td>");
tr.append("<td>" + data[i].Manufacturer + "</td>");
$('table').append(tr);
}
};<-- MISSING CLOSING ')' FOR 'getJSON()'
}
$.getJSON('/home/jlpourt1/workspace/LavaLamp/lava.json', function(data) {
$.each(data, function(i) {
$('<tr />').append(
$('<td />', { text: data[i].LavaLamp }),
$('<td />', { text: data[i].price }),
$('<td />', { text: data[i].basicColor }),
$('<td />', { text: data[i].costBook.unitPrice }),
$('<td />', { text: data[i].manufacturer.name })
).appendTo($('table'));
});
});
Если вы хотите сделать это еще дальше, я бы предложил короткую функцию для установки текста в случае, если значение не найдено. Что-то вроде:
/* setText('String value', 'Alternate String value in case first one is empty'); */
function setText(a,b){return a?a:"string"==typeof b?b:"N/A"};
$.getJSON('/home/jlpourt1/workspace/LavaLamp/lava.json', function(data) {
$.each(data, function(i) {
$('<tr />').append(
$('<td />', { text: setText(data[i].LavaLamp) }),
$('<td />', { text: setText(data[i].price) }),
...
$('<td />', { text: setText(data[i].manufacturer.name, 'Manufacturer Not Found') })
...
Смотрите также:
Кажется, что нет открытия tr
$.getJSON('/home/jlpourt1/workspace/LavaLamp/lava.json', function(data) {
var tr;
for (var i = 0; i < data.length; i++) {
tr = $('<tr>');
tr.append("<td>" + data[i].LavaLamp + "</td>");
tr.append("<td>" + data[i].Price + "</td>");
tr.append("<td>" + data[i].Color + "</td>");
tr.append("<td>" + data[i].CostBook + "</td>");
tr.append("<td>" + data[i].Manufacturer + "</td>");
tr.append("</tr>");
$('table').append(tr);
}
});
tr = $('<tr/>')
создает элемент tr
который содержит оба тега.
LavaLamp
имя свойстваLavaLamp
?