我有一个问题,我需要在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'来做列。是吗?
非常感谢任何指针。
感谢,
阿沙
答案 0 :(得分:0)
我建议您不要使用addRowData
。使用beforeProcessing
将服务器返回的数据修改为jqGrid可以读取的格式更有效。例如,您可以将data.data
部分拆分为\n
并填写相应项目的数组:
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
属性生成了非常独特的值。
您将找到相应的演示here。