JQuery Каждый объект Json
У меня есть набор результатов, возвращающийся из службы, которая дает мне следующий json
{
"ThreadCount":61,
"GroupList":[
{"userName":"KLT","count":2687},
{"userName":"KCameron","count":718},
{"userName":"IRG","count":156},{"userName":"JLB","count":123},{"userName":"HML","count":121},{"userName":"SMN","count":99},{"userName":"TBridges","count":68},{"userName":"ARF","count":65},{"userName":"MarkGreenway","count":61},{"userName":"SMC","count":55},{"userName":"EMD","count":52},{"userName":"PKP","count":41},{"userName":"KBounds","count":36},{"userName":"MAN","count":33},{"userName":"LAC","count":17},{"userName":"EPS","count":17},{"userName":"CAN","count":7},{"userName":"MAJ","count":3},{"userName":"CPC","count":2}]
}
Я хочу использовать JQuery (или javascript, чтобы поместить threadCount в один div и добавить имена пользователей и фрагменты в таблицу
success: function(result) {
$("#Unfiled").html(result.ThreadCount);
$.each(result.GroupList, function(user) {
$('#myTable > tbody').append(
'<tr><td>'
+ user.userName
+ '</td><td>'
+ user.count +
'</td></tr>'
);
});
}
По какой-то причине я ничего не получаю в своей таблице...
Кстати мой HTML здесь:
<table>
<tr>
<td>
Unfiled Emails:
</td>
<td id="Unfiled">
-1
</td>
</tr>
<tr>
<td colspan="2">
<table id="myTable" border="2" cellpadding="3" cellspacing="3">
</table>
</td>
</tr>
</table>
Я знаю, что мне не хватает чего-то простого...
Спасибо за вашу помощь заранее
Ответы
Ответ 1
Внутри функции, предоставляемой each
, this
относится к текущему элементу. Попробуйте следующее:
$.each(result.GroupList, function() {
$('#myTable > tbody').append(
'<tr><td>'
+ this.userName
+ '</td><td>'
+ this.count +
'</td></tr>'
);
});
Если это не сработает для вас, это может иметь какое-то отношение к этому: $('#myTable > tbody')
, учитывая, что нет элемента tbody
. Я считаю, что Internet Explorer автоматически создаст один, а другие браузеры не будут. Проверьте $.support.tbody
, чтобы убедиться, что браузер делает это для вас.
Ответ 2
Я заметил, что в вашей таблице нет элемента tbody. Это может быть частью вашей проблемы.
$('#myTable > tbody').append.....
<table id="myTable" border="2" cellpadding="3" cellspacing="3">
</table>
Я также предложил бы создать строку в цикле $.each(), а затем после каждого цикла выполнить следующее:
$('#myTable > tbody').html(string);
Это уменьшит накладные расходы при добавлении при каждом повторении по массиву.
Ответ 3
Когда я использовал $.each(), я использовал функцию (i, item), где я - индекс, указывающий целое число, а элемент - фактический объект. Вот как документация показывает, что это делается - метод описывается как обратный вызов функции (indexInArray, valueOfElement).