将JSON数据映射到jqGrid

将JSON数据映射到jqGrid,jqgrid,Jqgrid,下面的代码创建一个javascript对象,将其转换为JSON,并尝试将其加载到jqGrid中。我一直在跟随维基的例子,我觉得我已经非常准确地跟随了他们的领导,但仍然没有运气。有人能看到这里缺少的链接吗 jQuery(document).ready(function () { var gridData = { total: 2, page: '1', records: '12', rows: [

下面的代码创建一个javascript对象,将其转换为JSON,并尝试将其加载到jqGrid中。我一直在跟随维基的例子,我觉得我已经非常准确地跟随了他们的领导,但仍然没有运气。有人能看到这里缺少的链接吗

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

您不需要将数据转换为JSON字符串。jqGrid必须将数据转换回来。在这种情况下,您应该使用
datatype:'jsonstring'
datastr:gridData

最好的方法是只使用项目数组:

var gridData = [
    { id: '1', col1: 'cell11', col2: 'cell12', col3: 'cell13' },
    { id: '2', col1: 'cell21', col2: 'cell22', col3: 'cell23' }
];
$('#jqgrid').jqGrid({
    data: gridData,
    datatype: 'local',
    ...
});

还有一句话:我过去使用了
$.toJSON
,但后来改用了更好的官方支持方式
JSON.stringify
,这是在现代浏览器中本机实现的。因此,我建议将来使用从或加载json2.js,并从文件中使用
JSON.stringify
。如果浏览器具有本机支持,那么json2.js如果没有,就使用它。json2.js中的
JSON.stringify
的实现非常好。Oleg,非常感谢您的精彩见解。你的建议很有效。我应该意识到我是在将对象转换为字符串,而不是JSON格式。我现在了解到JSON对象是一种原生JS格式。因此,这引出了一个后续问题,如果我想创建一个JSON对象并用数据类型“JSON”加载网格,我将如何更改示例以实现这一点?(第一步是删除stringify调用)。@John:在我看来,你仍然对什么是JSON格式有一些误解。构造
var gridData=[{id:'1',col1:'cell11',col2:'cell12',col3:'cell13'},{id:'2',col1:'cell21',col2:'cell22',col3:'cell23'}]不是JSON。通过构造一个定义JavaScript对象,它是另一个对象的数组。相同的JSON版本是string
var jsonStr='[{“id”:“1”,“col1”:“cell11”,“col2”:“cell12”,“col3”:“cell13”},{“id”:“2”,“col1”:“cell21”,“col2”:“cell22”,“col3”:“cell23”}]。两者看起来很接近,但它们是不同的。@John:如果您想使用
datatype:'json'
则应从web服务器获取或发布json数据。在最简单的情况下,您应该将数据保存在文本文件中,将文本文件放在web服务器上,并使用文本磁贴的url作为jqGrid的
url
参数的值。我建议您在中验证JSON文本。请参见和作为演示