2009-10-14 20 views
17

Tengo un conjunto de resultados de regresar de un servicio que me da el siguiente JSONJquery Cada objeto 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}] 
} 

Quiero usar jQuery (o javascript para poner el THREADCOUNT en un div y añadir los nombres de usuario y counds a una tabla

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

Por alguna razón no estoy recibiendo nada en mi mesa ...

Por cierto mi HTML está aquí:

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

sé que estoy perdiendo algo simple ...

Gracias por su ayuda de antemano

+0

¿Está completamente seguro de que recibirá una respuesta como la que describió? Me di cuenta de que tienes el contador sin llenar -1 en lugar de 61, parece que el servidor te devuelve datos incorrectos. –

+0

Lamento engañarte Artem ... el -1 es lo que hay antes de que ocurra el ajax. – MarkKGreenway

Respuesta

40

Dentro de la función proporcionada a each, this se refiere al elemento actual. Prueba esto:

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

Si eso no funciona para usted, que puede tener algo que ver con esto: $('#myTable > tbody'), teniendo en cuenta que no hay ningún elemento tbody. Creo que Internet Explorer creará uno automáticamente pero los otros navegadores no lo harán. Consulte $.support.tbody para ver si el navegador hace eso por usted.

+0

Para mi solución que funcionó, utilicé su función de cambio para que funcione. pero cambiar el html de la tabla realmente me aceleró. – MarkKGreenway

+0

@nickf 'this' resolvió mi problema – jeezyfreezy

2

Cuando he usado $ each() He utilizado una función (I, punto), donde i es un índice que indica un entero, y el artículo es el objeto real. Así es como lo muestra the documentation: el método se describe como devolución de llamada de función (indexInArray, valueOfElement).

3

Me di cuenta de que su mesa en realidad no tiene un elemento tbody. Esto podría ser parte de tu problema.

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

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

Me gustaría también sugieren que se crea una cadena en su() bucle $ each y luego hacer lo siguiente después de su cada bucle:

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

Esto reducirá la sobrecarga de añadir cada vez iteras sobre la matriz.