2009-10-14 10 views
17

Mam zestaw wyników powrocie z usługą, która daje mi następujący jsonJquery Każdy Json Object

{ 
    "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}] 
} 

chcę użyć jQuery (lub javascript, aby umieścić THREADCOUNT w jednym div i dodać nazwy użytkowników i counds do tabeli

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>' 
     ); 
    }); 
} 

z jakiegoś powodu nie otrzymuję nic w moim stole ...

Przy okazji mój HTML jest tutaj:

<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> 

wiem, że jestem brakuje czegoś proste ...

Dzięki za pomoc z góry

+0

Czy jesteś całkowicie pewien, że otrzymałeś odpowiedź zgodnie z opisem? Zauważyłem, że masz niezapełniony licznik -1 zamiast 61, wygląda na to, że serwer zwraca błędne dane. –

+0

Przepraszam, że wprowadzam w błąd Artem ... -1 jest tym, co jest przed pojawieniem się ajax. – MarkKGreenway

Odpowiedz

40

Wewnątrz funkcji podanej dla each, this odnosi się do bieżącego elementu. Spróbuj tego:

$.each(result.GroupList, function() { 
    $('#myTable > tbody').append(
     '<tr><td>' 
     + this.userName 
     + '</td><td>' 
     + this.count + 
     '</td></tr>' 
    ); 
}); 

Jeśli to nie zadziała, to może mieć coś wspólnego z tym: $('#myTable > tbody'), biorąc pod uwagę, że nie ma tbody elementem. Wierzę, że Internet Explorer automatycznie utworzy jedno, ale inne przeglądarki tego nie zrobią. Sprawdź $.support.tbody, aby sprawdzić, czy przeglądarka robi to za Ciebie.

+0

Dla mojego rozwiązania, które zadziałało, użyłem zmiany funkcji, aby uruchomić ją. ale zmiana html stołu naprawdę przyspieszyła dla mnie. – MarkKGreenway

+0

@nickf 'this' rozwiązał mój problem – jeezyfreezy

2

Kiedy użyłem $ .each() Użyłem funkcji (I pozycja), gdzie i jest indeksem całkowitoliczbowym, a przedmiot jest faktycznym obiektem. Tak pokazuje the documentation - metoda jest opisana jako wywołanie funkcji (indexInArray, valueOfElement).

3

Zauważyłem, że Twój stół nie ma elementu tbody. To może być częścią twojego problemu.

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

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

Chciałbym również zasugerować, że utworzyć ciąg w $ .each() w pętli, a następnie wykonaj następujące czynności po każdej pętli:

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

To zredukuje narzut dołączając za każdym razem możesz iterować po tablicy.

Powiązane problemy