2009-10-14 23 views
17

ich eine Ergebnismenge aus einem Dienst zurückkehrt, die mir folgende jsonJQuery Jedes Json Objekt

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

ich JQuery (oder Javascript setzen die tpi in einem div und fügen Sie die Benutzernamen und counds verwenden möchten gibt auf eine Tabelle

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

Aus irgendeinem Grund bin ich nicht alles in meinem Tisch zu bekommen ...

Durch die Art und Weise ist mein HTML hier:

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

Ich weiß, dass ich einfach bin etwas fehlt ...

Vielen Dank für Ihre Hilfe im Voraus

+0

Sind Sie absolut sicher, dass Sie eine Antwort wie beschrieben erhalten? Ich habe bemerkt, dass Sie Zähler -1 statt 61 nicht gefüllt haben, scheint wie Server Ihnen falsche Daten zurückgibt. –

+0

Entschuldigung, Sie Artem irreführen ... die -1 ist, was dort ist, bevor der Ajax auftritt. – MarkKGreenway

Antwort

40

Innerhalb der Funktion each bezieht sich this auf das aktuelle Element. Versuchen Sie folgendes:

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

Wenn das nicht für Sie arbeiten, kann es etwas damit zu tun: $('#myTable > tbody'), wenn man bedenkt, dass es keine tbody Element. Ich glaube, dass der Internet Explorer automatisch einen erstellt, aber die anderen Browser nicht. Überprüfen Sie $.support.tbody, um zu sehen, ob der Browser das für Sie erledigt.

+0

Für meine Lösung, die funktionierte, habe ich Ihre Funktionsänderung verwendet, um sie zum Laufen zu bringen. aber das Ändern der HTML des Tisches hat es wirklich für mich beschleunigt. – MarkKGreenway

+0

@nickf 'this' löste mein Problem – jeezyfreezy

2

Als ich $ .each verwendet habe() ich eine Funktion verwendet haben, (i, Artikel), Dabei ist i eine Ganzzahl, die den Index angibt, und Element ist das tatsächliche Objekt. So zeigt the documentation, dass es getan wird - die Methode wird als Funktionsrückruf beschrieben (indexInArray, valueOfElement).

3

Ich bemerkte, dass Ihr Tisch kein tbody Element hat. Dies könnte Teil Ihres Problems sein.

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

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

Ich würde auch vorschlagen, dass Sie eine Zeichenfolge in Ihrem $ .each() Schleife erstellen und führen Sie dann Ihre jede Schleife folgendes nach:

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

Dies wird den Aufwand für das Anfügen jedes Mal reduzieren Sie durchlaufen das Array.