在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
属性生成了非常独特的值。
你会在这里找到相应的演示。