2009-10-14 3 views
17

У меня есть результирующий набор, возвращающегося из сервиса, который дает мне следующий JSONJquery Каждый объект 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 и добавить имена пользователей и counds к таблице

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> 

Я знаю, что я что-то просто не хватает ...

Спасибо за помощь заранее

+0

Вы уверены, что получили ответ, как описано? Я заметил, что у вас есть незаполненный счетчик -1 вместо 61, кажется, что сервер возвращает неверные данные. –

+0

Извините, что вы ошибаетесь, Артем ... -1 это то, что есть до появления ajax. – MarkKGreenway

ответ

40

Внутри функции, предусмотренной для 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, чтобы узнать, подходит ли браузер для вас.

+0

Для моего решения, которое сработало, я использовал вашу функцию, чтобы заставить ее работать. но изменение html таблицы действительно ускорило его для меня. – MarkKGreenway

+0

@nickf 'this' решил мою проблему – jeezyfreezy

2

Когда я использовал $ .each() Я использовал функцию (я, пункт), где i - индекс, указывающий целое число, а элемент - фактический объект. Вот как это делается the documentation - метод описывается как обратный вызов функции (indexInArray, valueOfElement).

3

Я заметил, что на вашем столе нет элемента tbody. Это может быть частью вашей проблемы.

$('#myTable > tbody').append..... 

<table id="myTable" border="2" cellpadding="3" cellspacing="3"> 
</table> 

Я хотел бы также предположить, что вы создаете строку в файле $ .each() петли, а затем выполните следующие действия после каждого цикла:

$('#myTable > tbody').html(string); 

Это позволит снизить нагрузку на каждый раз, добавляя вы перебираете массив.

Смежные вопросы