jqgrid addJSONData不起作用

时间:2012-05-02 03:06:35

标签: jquery jqgrid

我正在研究jqGrid,返回json是

{"total":1,"page":1,"records":2,"rows":[{"projectId":"1022","name":"john"}]}

然后在我调用的函数中

 var jsongrid = eval("("+data+")");                  
 var thegrid = jQuery("#projectList")[0];                       
 thegrid.addJSONData(jsongrid);

但它给了我错误:对象为null或未定义。不知道为什么。我没有使用json阅读器。

顺便说一句,你知道怎么用set方法来设置“总数”,“页面”,“记录”吗?

1 个答案:

答案 0 :(得分:2)

我认为您尝试在之前调用addJSONData方法将根据jQuery("#projectList").jqGrid({...});

创建网格

addJSONData的使用几乎总是不需要的(请参阅我关于主题here的第一篇文章中的一篇)。以同样的方式,你永远不应该使用邪恶的eval方法。一个人使用jQuery.parseJSONJSON.parse代替。

我认为您应该使用datatype: 'json'来解决您的问题。您应该发布更多代码,以向您展示如何使用其他jqGrid选项。

更新:根据您之前的问题,您似乎只想在单击“搜索”按钮时从表单向服务器发送其他数据。在这种情况下,我建议将代码修改为以下

var $grid = $("#projectList");

$grid.jqGrid({
    url: 'user595234.json',
    datatype: "json",
    serializeGridData: function (data) {
        return $.param(data) + '&' + $("#project_search_form").serialize();
    },
    jsonReader: {id: "projectId", repeatitems: false},
    colNames: ['ID', 'Name'],
    colModel: [
        {name: 'projectId', width: 255},
        {name: 'name', width: 255}
    ],
    rowNum: 10,
    rowList: [10,20,30],
    pager: '#projectPager',
    sortname: 'projectId',
    viewrecords: true,
    sortorder: "desc",
    caption: "Simple data manipulation",
    height: "auto"
}).jqGrid("navGrid", "#projectPager", {edit: false, add: false, del: false});

$("#search").click(function () {
    $grid.trigger("reloadGrid", [{page: 1}]);
});

the demo中,我只使用了使用jQuery.serialize示例中的表单并对其进行了一些修改。它显示您需要的数据

enter image description here

此外,就像您可以轻松验证Fiddler或Firebug一样,该URL将附加其他参数,如下所示

...?_search=false&nd=1336057299806&rows=10&page=1&sidx=projectId&sord=desc&a=1&b=2&c=3&d=4&e=7&f=8 

标准参数

_search=false&nd=1336057299806&rows=10&page=1&sidx=projectId&sord=desc

将附加表格中的参数

a=1&b=2&c=3&d=4&e=7&f=8

在某些情况下,可以选择使用jQuery.serializeArray。它允许以其他格式(如JSON)序列化数据或以其他格式转换数据(请参阅here),这些格式可以使用$.extend轻松与标准jqGrid参数合并。