0

我使用以下配置创建了网格

$.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\"}"}
]}

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

4

1 回答 1

1

我认为您的主要错误是使用cellas string。你有

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

代替

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

第二个问题是您使用了一些非常奇怪的输入数据格式。一般来说,您可以使用jsonReader选项指定输入数据的格式。如果您不使用任何jsonReader默认值,将使用默认值(请参阅文档)。所以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.jSONResponseObject. datastr不能是 JSON 字符串。可能是对象。

最后一点:我建议你使用loadError回调。有关更多详细信息,请参阅答案

于 2012-11-14T07:47:50.037 回答