el siguiente código crea un objeto de javascript, lo convierte en JSON, y los intentos de cargar en un jqGrid. He estado siguiendo la wiki ejemplos, y siento que me han seguido su ejemplo de forma muy precisa, pero todavía no estoy teniendo suerte. Nadie puede ver lo que el «eslabón perdido» es aquí?

jQuery(document).ready(function () {

    var gridData = {
        total: 2,
        page: '1',
        records: '12',
        rows: [
                        { id: '1', col1: 'cell11', col2: 'cell12', col3: 'cell13' },
                        { id: '2', col1: 'cell21', col2: 'cell22', col3: 'cell23' }
                        ]
    };

    gridData = $.toJSON(gridData);
    $('#jqgrid').jqGrid({
        data: gridData,
        datatype: 'json',
        colNames: ['Col1', 'Col2', 'Col3'],
        colModel: [
                        { name: 'col1' },
                        { name: 'col2' },
                        { name: 'col3' }
                        ],
        jsonReader: {
            root: 'rows',
            total: 'total',
            page: 'page',
            records: 'records',
            repeatitems: false,
            id: '0'
        }
    })
  • Una aclaración más: he utilizado $.toJSON en el pasado, pero luego cambió para mejor y oficiales de forma compatible JSON.stringify que se implementan nativo en los navegadores modernos. Así que te recomiendo usar para cargar json2.js desde github.com/douglascrockford/JSON-js o json.org/js.html y el uso JSON.stringify desde el archivo en el futuro. Si el navegador tiene soporte nativo, a continuación, json2.js uso de ella si no de la ejecución de JSON.stringify en json2.js es muy bueno.

1 Comentario

  1. 5

    Usted no necesita convertir los datos en cadena JSON. jqGrid tendrá que convertir los datos de nuevo. En el caso de que usted debe utilizar datatype:'jsonstring' y datastr:gridData.

    La mejor manera sería utilizar sólo la matriz de punto:

    var gridData = [
        { id: '1', col1: 'cell11', col2: 'cell12', col3: 'cell13' },
        { id: '2', col1: 'cell21', col2: 'cell22', col3: 'cell23' }
    ];
    $('#jqgrid').jqGrid({
        data: gridData,
        datatype: 'local',
        ...
    });
    
    • Oleg, muchas gracias por su excelente visión. Su suggestiones funcionó a la perfección. Me debería haber dado cuenta de que me estaba convirtiendo en un objeto en una cadena de texto y no en formato JSON. Ahora entiendo un objeto JSON es un nativo de JS formato. Esto nos lleva a una segunda pregunta, si yo quería crear un objeto JSON y carga de la red con datatype:’json’, ¿cómo puedo cambiar el ejemplo a hacerlo? (Paso 1 sería quitar el stringify llamada).
    • A mí me parece que continut tienen cierta incomprensión de lo que es el formato JSON. La construcción de var gridData = [{id:'1',col1:'cell11',col2:'cell12',col3:'cell13'},{id:'2',col1:'cell21',col2:'cell22',col3:'cell23'}]; es NO JSON. Con la construcción de uno define JavaScript objeto, que es la matriz de otro de los objetos. JSON versión de la misma es cadena var jsonStr='[{"id":"1","col1":"cell11","col2":"cell12","col3":"cell13"},{"id":"2","col1":"cell21","col2":"cell22","col3":"cell23"}]';. Ambos miran de cerca, pero estos son diferentes las cosas.
    • Si desea utilizar datatype:'json' los datos JSON debe ser get o enviados desde el servidor web. En la situación más simple que usted debe guardar los datos en el archivo de texto, coloque el archivo de texto en el servidor web y el uso de la dirección url para el texto de baldosas como el valor de la url parámetro de jqGrid. Te recomiendo verificar el JSON de texto en jsonlint.com. Consulte ok-soft-gmbh.com/jqGrid/John.txt y ok-soft-gmbh.com/jqGrid/John.htm como el demo

Dejar respuesta

Please enter your comment!
Please enter your name here