2010-09-01 11 views
5

Soy bastante nuevo en jQuery y acabo de empezar a trabajar con jqGrid. Revisé los documentos de jqGrid para ver cómo mostrar algunos datos que estoy recibiendo en formato JSON dentro de mi grilla en vano. Cuando creo la grilla, se muestra con los encabezados correctos, la información del buscapersonas, etc. y a través de Firebug y puedo ver la solicitud y la respuesta de los datos de JSON. El jsonReader a continuación es uno de los muchos que he probado y en las devoluciones de llamada de funciones puedo registrar los valores específicos que estoy recibiendo, así sé que obtengo los datos.jqGrid y lector JSON

¿Cuál es la forma correcta de obtener el JSON especificado a continuación cargado en el jqGrid?

Aquí está el código correspondiente:

HTML:

<div id="dataInfo"> 
    <table id="dataTable"></table> 
    <div id="dataTablePager"></div> 
</div> 

JS

jQuery("#dataTable").jqGrid({ 
       url: 'http://<snip>', 
       mtype: 'GET', 
       datatype: 'json', 
       jsonReader: { 
        root: 'ipResponses', 
        id: 'startIP', 
        repeatitems: false, 
        page: function(obj) { return 1; }, 
        total: function(obj) { return 1; }, 
        records: function(obj) { return obj.ipInfo.ipResponses.length; }, 
        userdata: "userData" 
       }, 
       colNames: ['StartIP', 'EndIP'], 
       colModel: [ 
        { 
         name: 'startIP', 
         index: 'startIP', 
         width: 55 
        }, 
        { 
         name: 'endIP', 
         index: 'endIP', 
         width: 55 
        } 
       ], 
       pager: '#dataTablePager', 
       rowNum: 8, 
       rowList: [25,50,100], 
       sortname: 'startIP', 
       sortorder: 'asc', 
       viewrecords: true, 
       caption: 'Data', 
       pgtext:"Page {0}" 
      }); 

JSON

{ 
    "ipInfo": { 
     "queryStartIP": "4.4.4.0", 
     "queryEndIP": "4.4.4.256", 
     "ipResponses": [ 
      { "startIP": "4.4.4.1", "endIP": "4.4.4.5"}, 
      { "startIP": "4.4.4.10", "endIP": "4.4.4.15"} 
     ] 
    } 
} 

Respuesta

12

Su problema principal son algunos pequeños cambios en el jsonReader. Puede ser, por ejemplo,

jsonReader: { 
    root: 'ipInfo.ipResponses', 
    id: 'startIP', 
    repeatitems: false, 
    page: function(obj) { return 1; }, 
    total: function(obj) { return 1; }, 
    records: function(obj) { return obj.ipInfo.ipResponses.length; }, 
} 

La misma jqGrid con algunos cambios cosméticos se puede ver en vivo bajo http://www.ok-soft-gmbh.com/jqGrid/ipInfo.htm.

+0

¡Fantástico! Sabía que tenía que estar cerca. Muchas gracias. –

+0

Tengo una pregunta más. Tengo otro objeto en el objeto ipInfo con datos similares, pero no está dentro de una matriz. Básicamente, sería un único objeto (llámalo newObj: {x: 10, y: 10}) dentro de cada objeto ipInfo para el que tendré que devolver muchos objetos ipInfo. –

+0

Ahhh ... no se preocupe, lo descubrí. Aparentemente tiene que ser una matriz, así que cambié la raíz a root: function (obj) {return [obj.ipInfo.newObj]; } funcionó. De nuevo, gracias por tu ayuda. –