我正在尝试动态创建网格。我的目标是创建一种动态前端来显示一些数据库表。所以我需要动态添加/删除列。我需要动态更改列的数据类型。
我使用a similar question中作为答案提供的脚本。
我构建了网格,显示了我的列。但是没有数据加载到网格中。 Firebug显示请求被解雇。正确的json数据返回。实际上grid也会触发gridComplete事件。但没有显示数据: - (
有没有人遇到过这个问题?我花了整整一天调整jsonReader和colModel无济于事
我的示例html文件:
<!doctype html>
<html>
<link href="../styles/layout.css" rel="stylesheet" type="text/css" />
<script type="text/javascript"
src="/struts2-jquery-grid-showcase/struts/js/base/jquery-1.4.2.js"></script>
<script type="text/javascript"
src="/struts2-jquery-grid-showcase/struts/js/base/jquery-ui.js"></script>
<script type="text/javascript"
src="/struts2-jquery-grid-showcase/struts/js/plugins/jquery.form.js"></script>
<script type="text/javascript"
src="/struts2-jquery-grid-showcase/struts/js/plugins/jquery.subscribe.js"></script>
<link rel="stylesheet" href="../themes/showcase/jquery-ui.css"
type="text/css" />
<script type="text/javascript"
src="/struts2-jquery-grid-showcase/struts/js/plugins/jquery.jqGrid.js"></script>
<script type="text/javascript"
src="/struts2-jquery-grid-showcase/struts/js/struts2/jquery.struts2.js"></script>
<script type="text/javascript" src="../js/refData.js"></script>
<script type="text/javascript">
jQuery(document).ready(function () {
jQuery.struts2_jquery.debug = true;
jQuery.struts2_jquery.loadAtOnce = true;
jQuery.scriptPath = "/struts2-jquery-grid-showcase/struts/";
jQuery.struts2_jquery.minSuffix = "";
jQuery.ajaxSettings.traditional = true;
jQuery.ajaxSetup ({
cache: false
});
$.ajax(
{
type: "POST",
url: "/struts2-jquery-grid-showcase/refData-table.action",
data: "",
dataType: "json",
success: function(result)
{
colD = result.gridModel;
colN = result.colNames;
colM = result.colModel;
jQuery("#refData").jqGrid({
jsonReader : {
cell: "",
id: "0"
},
url: 'SomeUrl/Getdata',
datatype: 'jsonstring',
mtype: 'POST',
datastr : colD,
colNames:colN,
colModel :colM,
pager: jQuery('#pager'),
rowNum: 5,
rowList: [5, 10, 20, 50],
viewrecords: true,
loadComplete: function(data){alert('loaded');},
loadError: function(xhr,status,error){alert('error');}
})
},
error: function(x, e)
{
alert(x.readyState + " "+ x.status +" "+ e.msg);
}
});
setTimeout(function() {$("#refData").jqGrid('setGridParam',{datatype:'json'}); },500);
});
</script>
<h2>Maintain Reference Data</h2>
<table id="refData">
<tr>
<td />
</tr>
</table>
<div id="pager"></div>
</html>
我的json数据:
{"JSON":"success","colModel":[{"editable":true,"edittype":"integer","index":"userInfoId","jsonmap":"userInfoId","key":false,"name":"userInfoId","resizable":true,"search":false,"sortable":true,"width":300},{"editable":true,"edittype":"text","index":"UserID","jsonmap":"userID","key":true,"name":"userID","resizable":true,"search":false,"sortable":true,"width":300}],"colNames":["UserInfo ID","User ID"],"gridModel":[{"userID":"SMI","userInfoId":5},{"userID":"ABC","userInfoId":7},{"userID":"PQR","userInfoId":8},{"userID":"FUR","userInfoId":10},{"userID":"COO","userInfoId":13}],"page":1,"records":56,"rows":15,"sidx":null,"sord":"asc","total":0}
答案 0 :(得分:6)
在我看来,您忘记将{}包含为gridModel
的内容。目前数据看起来像
{
"JSON": "success",
"colModel": [
...
],
"colNames": [ "UserInfo ID", "User ID" ],
"gridModel": [
{"userID": "SMI","userInfoId": 5},
{"userID": "ABC","userInfoId": 7},
{"userID": "PQR","userInfoId": 8},
{"userID": "FUR","userInfoId": 10},
{"userID": "COO","userInfoId": 13}
],
"page": 1,
"records": 56,
"rows": 15,
"sidx": null,
"sord": "asc",
"total": 0
}
而不是
{
"JSON": "success",
"colModel": [
...
],
"colNames": [ "UserInfo ID", "User ID" ],
"gridModel": { [
{"userID": "SMI","userInfoId": 5},
{"userID": "ABC","userInfoId": 7},
{"userID": "PQR","userInfoId": 8},
{"userID": "FUR","userInfoId": 10},
{"userID": "COO","userInfoId": 13}
],
"page": 1,
"records": 56,
"rows": 15,
"total": 0
}
}
"jsonmap"
的用法似乎我也不是真的需要。
答案 1 :(得分:5)
非常感谢Oleg。
按照你的建议修改我的json的结构,然后稍微调试一下来修复一些attribs(比如root),我就能让它工作了。这是最后的json和html:
<强> HTML 强>
$.ajax(
{
type: "POST",
url: "refData-table.json",
data: "",
dataType: "json",
success: function(result)
{
colD = result.gridModel;
colN = result.colNames;
colM = result.colModel;
jQuery("#refData").jqGrid({
jsonReader : {
repeatitems: false,
root:"dataset",
cell: "",
id: "0"
},
url: 'SomeUrl/Getdata',
datatype: 'jsonstring',
mtype: 'POST',
datastr : colD,
colNames:colN,
colModel :colM,
pager: jQuery('#pager2'),
rowNum: 5,
rowList: [5, 10, 20, 50],
viewrecords: true,
loadComplete: function(data){alert('loaded');},
loadError: function(xhr,status,error){alert('error');}
})
},
error: function(x, e)
{
alert(x.readyState + " "+ x.status +" "+ e.msg);
}
});
setTimeout(function() {$("#refData").jqGrid('setGridParam',{datatype:'json'}); },500);
<强> JSON:强>
{
"JSON":"success",
"colModel":[
{"editable":true,"edittype":"integer","index":"userInfoId","jsonmap":"userInfoId","key":false,"name":"userInfoId","resizable":true,"search":false,"sortable":true,"width":300},
{"editable":true,"edittype":"text","index":"UserID","jsonmap":"userID","key":true,"name":"userID","resizable":true,"search":false,"sortable":true,"width":300}
],
"colNames":["UserInfo ID","User ID"],
"gridModel":{
"dataset":[
{"userID":"SMI","userInfoId":5},
{"userID":"ABC","userInfoId":7},
{"userID":"PQR","userInfoId":8},
{"userID":"FUR","userInfoId":10},
{"userID":"COO","userInfoId":13}
],
"page":1,
"records":56,
"rows":15,
"sidx":null,
"sord":"asc",
"total":0
}
}