jqgrid addJSONData不起作用

我正在研究jqGrid,返回json是

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

然后在我打电话的function

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

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

顺便说一句,你知道如何使用set方法设置“总计”,“页面”,“记录”吗?

我假设您在使用jQuery("#projectList").jqGrid({...});创建网格之前尝试调用addJSONData方法jQuery("#projectList").jqGrid({...});

实际上总是不需要使用addJSONData (请参阅我在这里关于主题的第一篇文章中的一篇)。 以同样的方式,你永远不应该使用邪恶的eval方法。 一个使用jQuery.parseJSON或JSON.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}]); }); 

在演示中,我只是从使用jQuery.serialize的示例中获取表单并稍微修改它。 它显示您需要的数据

在此处输入图像描述

此外,就像您可以轻松validationFiddler或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)序列化数据或以另一种格式(参见此处 )转换数据,这可以使用$ .extend轻松与标准jqGrid参数合并。