2012-12-07 40 views
0

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

任何指针,非常感谢。

感谢,

阿莎

回答

0

,我不建议你使用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属性。

相应的演示你会发现here

+0

感谢奥列格,工作像一个魅力与一些变化。我必须做出更改,因为我在发布数据时错过了一些内容,并且我可以免费搜索/过滤。有一个问题,有没有办法在搜索文本框旁边添加一个过滤器图标。再次感谢。 – Alice