在jqgrid和格式化上显示json数据时出现问题

时间:2012-12-07 15:07:28

标签: jquery jqgrid

我有一个问题,我需要在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'来做列。是吗?

非常感谢任何指针。

感谢,

阿沙

1 个答案:

答案 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