2012-11-14 48 views
0

jqGrid的填充

$.ajax({ 
     type: "POST", 
     url: "populateAllRulesJson.action", 
     data: "", 
     dataType: "json", 
     success: function(result) 
     { 
      alert("SUCCESS ::: " + JSON.stringify(result.jSONResponseObject)); 
      data = JSON.stringify(result.jSONResponseObject); 
      jQuery("#rulesTable").jqGrid({ 
        url:"populateAllRulesJson.action", 
        datatype: "jsonstring", 
        height: 'auto', 
        width: 'auto', 
        colNames:['Rule ID','Description', 'Geograph', 'Process', 'Rules Classification', 'Types', 'UDAC'], 
        colModel:[ {name:'ruleID',index:'ruleID', width:65, sorttype:'int'}, 
           {name:'description',index:'description', width:150}, 
           {name:'geograph',index:'geograph', width:100}, 
           {name:'process',index:'process', width:100},    
           {name:'rulesClassification',index:'rulesClassification', width:100}, 
           {name:'types',index:'types', width:100}, 
           {name:'udac',index:'udac', width:100} 
          ], 
        datastr : data, 
        jsonReader: { repeatitems: false }, 
        rowNum:10, 
        rowList : [10,20,30], 
        loadonce:true, 
        mtype: "GET", 
        rownumbers: true, 
        rownumWidth: 10, 
        gridview: true, 
        pager: '#rulesDivPager', 
        sortname: 'ruleID', 
        viewrecords: true, 
        sortorder: "asc", 
        caption: "Searching Rules ..." 

       }); 
     }, 
     error: function(x, e) 
     { 
      alert(x.readyState + " "+ x.status +" "+ e.msg); 
     } 

}); 

我送以下JSON对象到网格我创建网格具有以下配置的空行。但网格填充了四个空白行。

{ 
"total":2, 
"page":1, 
"records":7, 
"rows":[{"id":"1","cell":"{\"ruleID\":\"43\",\"description\":\"Images, text and voice over should synchronize as best as possible.\",\"geograph\":\"Yell US\",\"process\":\"Photomotion\",\"rulesClassification\":\"Image\",\"types\":\"New\",\"udac\":\"NPM\"}"}, 
{"id":"2","cell":"{\"ruleID\":\"48\",\"description\":\" For profile pages UDAC Mismatch in a Control sheet can be ignored.\",\"geograph\":\"Yell US\",\"process\":\"Profile Pages\",\"rulesClassification\":\"Copysheet\",\"types\":\"New\",\"udac\":\"NGP\"}"}, 
{"id":"3","cell":"{\"ruleID\":\"51\",\"description\":\" Ignore all requests for logo sized artwork in NSP ads.\",\"geograph\":\"Yell US\",\"process\":\"Profile Pages\",\"rulesClassification\":\"Logo\",\"types\":\"New\",\"udac\":\"NSP\"}"}, 
{"id":"4","cell":"{\"ruleID\":\"47\",\"description\":\" Irregular borders are not allowed in banner ads..\",\"geograph\":\"Yell US\",\"process\":\"Profile Pages\",\"rulesClassification\":\"Border\",\"types\":\"New\",\"udac\":\"MRB\"}"} 
]} 

我在这个网格配置中犯了什么错误。请告诉我。

+0

我更新了我的答案 – Oleg

回答

1

我认为你的主要错误是使用cell作为字符串。你有代替

{"id":"1","cell":"{\"ruleID\":\"43\", ...}"}, 

{"id":"1","cell":{"ruleID":"43", ...}}, 

的第二个问题是,您使用的输入数据的一些非常奇怪的格式。一般来说,您可以使用jsonReader选项指定输入数据的格式。如果您不使用任何jsonReader,将使用默认值(请参阅the documentation)。所以cell属性的值必须是项目的阵列

{"id":"1","cell":["43", ...., "New","NPM"]}, 

可以减少发送"id"(尤其是虚值这是不相等的ruleID)和每一行中发送固定文本"cell"的需要数据的。在这种情况下,可以指定jsonReader: {cell: "", id: 0}和数据直接作为数组:

["43", ...., "New","NPM"] 

用法id: 0意味着该阵列的第一个元素指定唯一的rowid。

或者您可以使用jsonReader: {repeatitems: false, id: "ruleID"},并命名属性发送的项目为对象:

{"ruleID":"43", ....,"types":"New","udac":"NPM"} 

所以你有很多选择,但当前的JSON数据的格式是明确错误的,你必须改变它。

此外我认为你应该更好地使用datatype: "json"而不是datatype: "jsonstring"。如果您确实使用datatype: "jsonstring",则可以使用datastr : result.jSONResponseObjectdatastr一定不能是JSON字符串。这可能是对象。

最后一句:我建议你使用loadError回调。有关更多详细信息,请参见the answer