在jqgrid和格式化上显示json数据的麻烦

我有一个问题,我需要在jqgrid上显示json数据。 我得到的数据格式如下:

{"data":{"data":"\tat org.aaa.aaa.aaa.aaa.aaa.aaa(aaa.java:512)[147:org.aaa.aaa.aaa:9.1.1]\n\tat aaa.aaa.aaa.aaa.aaa.aaa(aaa.java:1789)[146:org.aaa:9.1.1]\n"}} 

我的javascript显示数据是:

  $("#grid").jqGrid({ url: '/getdata', datatype: "json", mtype: "GET", colNames:['data'], colModel:[ {name:'data', index:'data', align:'center'} ], jsonReader : { repeatitems: false, id: "0", cell: "", root: "logs", page: function() { return 1; }, total: function() { return 1; }, records: function(obj) { return obj.length; } }, loadonce: true, viewrecords: true, autowidth: true, multiselect: false, ignoreCase: true, sortable: true, height: 600, rowNum: 999 }); 

我尝试了一些组合,但无法使用此代码将数据显示在jqgrid上。 jqgrid显示一个空表。 我想我在这里遗漏了一些东西。

我还必须格式化数据,以便每次点击’\ n’时,我们都会将它显示在一个新行中。 我想我可以在格式化程序中使用’addrowdata’来做列。 是对的吗?

任何指针都非常感谢。

谢谢,

阿莎

我不建议你使用addRowData 。 使用beforeProcessing将服务器返回的数据修改为jqGrid可以读取的格式更有效。 例如,您可以通过\n拆分data.data部分并填充相应项的数组:

 autoencode: true, beforeProcessing: function (data) { var items = data.data.data.split("\n"), i, l, item; data.logs = []; for (i = 0, l = items.length; i < l; i++) { item = $.trim(items[i]); if (item.length > 0) { data.logs.push([item]); } } } 

我在上面的代码中包含了jQuery.trim的调用,以在每行的开头或结尾删除不需要的\t或其他空白字符。

我还包括autoencode: true选项,严格建议确保包含HTML特殊字符(如<>&等)的文本将正确显示在网格内。

另外,您应该将jsonReader更改为例如以下内容

 jsonReader: { root: "logs", cell: "", id: function () { return function () { return $.jgrid.randId(); } }, page: function() { return 1; }, total: function() { return 1; }, records: function(obj) { return obj.logs.length; } } 

id的值似乎很棘手,但是实现为每一行的id属性生成了非常独特的值。

你会在这里找到相应的演示。