2009-10-14 21 views
17

Ho un set di risultati di ritorno da un servizio che mi dà il seguente JSONJquery Ogni oggetto 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}] 
} 

voglio utilizzare jQuery (o JavaScript per mettere il threadcount in un div e aggiungere i nomi utente e counds a una tabella

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

per qualche ragione non ricevo niente in mio tavolo ...

Tra l'altro il mio HTML è qui:

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

so che mi manca qualcosa di semplice ...

Grazie per il vostro aiuto in anticipo

+0

Sei sicuro di ricevere risposta come hai descritto? Ho notato che hai un contatore unfilled -1 invece di 61, sembra che il server restituisca dati errati. –

+0

Mi dispiace di ingannare Artem ... il -1 è quello che c'è prima che si verifichi l'ajax. – MarkKGreenway

risposta

40

All'interno della funzione fornita a each, this fa riferimento all'elemento corrente. Prova questo:

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

Se questo non funziona per voi, che possa avere qualcosa a che fare con questo: $('#myTable > tbody'), visto che non v'è alcun elemento tbody. Credo che Internet Explorer creerà automaticamente uno ma gli altri browser no. Controlla $.support.tbody per vedere se il browser lo fa per te.

+0

Per la mia soluzione che ha funzionato ho usato il tuo cambio di funzione per farlo funzionare. ma cambiare l'html del tavolo è stato molto veloce per me. – MarkKGreenway

+0

@nickf 'questo 'ha risolto il mio problema – jeezyfreezy

2

Quando ho usato $ .each() Ho usato una funzione (I, punto), dove i è un intero che indica l'indice e l'oggetto è l'oggetto reale. È così che the documentation mostra che viene eseguito - il metodo è descritto come callback della funzione (indexInArray, valueOfElement).

3

Ho notato che il tuo tavolo non ha un elemento tbody. Questo potrebbe essere parte del tuo problema.

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

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

Vorrei anche suggerire che si crea una stringa nella vostra $ .each() loop e quindi effettuare le seguenti operazioni dopo la vostra ogni ciclo:

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

Ciò consentirà di ridurre il sovraccarico di aggiungendo di volta in volta si scorre sull'array.