通过jqGrid解析JSON:{}和[]之间的差异

时间:2013-06-09 06:43:23

标签: json jqgrid

我已将jqgrid实现为。,

$(function () {
    $("#accountHeadList").jqGrid({
        //url: '../../jqGridHandler1.ashx',
        url: '/Personalize/GetAccountHeads',
        datatype: 'json',
        width  : 400,
        height : 300, 
        colNames: ['name', 'value'],
        colModel: [
                { name: 'name', width: 100, sortable: true },
                { name: 'value', width: 100, sortable: true },
        ],
        rowNum: 10,
        rowList: [10, 20, 30],
        pager: '#gridPager',
        viewrecords: true,
        sortorder: 'asc',
        multiselect: true,
        caption: 'Account Heads',         
    });

    $("#accountHeadList").jqGrid('navGrid', '#gridPager', { edit: false, add: false, del: false });
});

当我将JSON返回为。时,

{"rows":[{"id":0,"cell":["Accounts Receivable",""]},{"id":1,"cell":["Acd",""]},{"id":2,"cell":["Bank Accounts",""]},{"id":3,"cell":["Cash On Hand",""]},{"id":4,"cell":["Income Tax Payable",""]},{"id":5,"cell":["Interest Payable",""]},{"id":6,"cell":["Investment Premium Payable",""]},{"id":7,"cell":["Prepaid Expenses",""]},{"id":8,"cell":["Salary \u0026 Wage Payable",""]},{"id":9,"cell":["Salary Receivable",""]},{"id":10,"cell":["Short Term Borrowing",""]}],"page":1,"total":1,"records":10}

解析得很好而且我在网格中获取数据。如果。,如果我传递数据如下。,它无法加载数据,只是空的表格列出现在网格中,(但同一个没有行)。

{"rows":[{"id":0,"cell":{"name":"Accounts Receivable","value":null}},{"id":1,"cell":{"name":"Acd","value":null}},{"id":2,"cell":{"name":"Bank Accounts","value":null}},{"id":3,"cell":{"name":"Cash On Hand","value":null}},{"id":4,"cell":{"name":"Income Tax Payable","value":null}},{"id":5,"cell":{"name":"Interest Payable","value":null}},{"id":6,"cell":{"name":"Investment Premium Payable","value":null}},{"id":7,"cell":{"name":"Prepaid Expenses","value":null}},{"id":8,"cell":{"name":"Salary \u0026 Wage Payable","value":null}},{"id":9,"cell":{"name":"Salary Receivable","value":null}},{"id":10,"cell":{"name":"Short Term Borrowing","value":null}}],"page":1,"total":1,"records":10}

我可以看到{}[]cell的区别,这可能是错误的根源。但为什么会这样呢?

1 个答案:

答案 0 :(得分:1)

服务器应该以jqGrid期望数据的默认格式返回数据,或者您应该使用jsonReader通知jqGrid有关数据格式的信息。

the feature requestthe pull request中已经是jqGrid的一部分。因此,如果您使用当前版本的jqGrid,那么jqGrid仍然可以读取许多(但不是全部)错误的格式化的输入数据。无论如何,了解使用哪个版本的jqGrid 非常重要。

如果您更喜欢在服务器的JSON响应中使用对象形式的数据,那么服务器应该以

的形式返回rows部分答案
"rows":[
    {"id":0,"name":"Accounts Receivable","value":null},
    {"id":1,"name":"Acd","value":null},
    {"id":2,"name":"Bank Accounts","value":null},
    ...
 ]

"cell"属性应删除)。如果使用不支持自动检测JSON输入数据的旧版jqGrid,则必须另外添加jsonReader: {repeatitems: false}