jQuery对我来说一直很头疼。我似乎无法理解什么以及如何得到错误。
我正在尝试将.asmx中的数据绑定到jqGrid。代码相对简单。请参阅以下代码
.aspx页面
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
<link href="css/jquery-ui-custom.css" rel="stylesheet" />
<script type="text/javascript" src="js/jquery.jqGrid.min.js"></script>
<link href="css/ui.jqgrid.css" rel="stylesheet" />
<script type="text/javascript" src="js/grid.locale-en.js"></script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="bodyContent" Runat="Server">
<table id="jQGridDemo">
</table>
<div id="jQGridDemoPager">
</div>
<script type="text/javascript" src="js/Jgrid.App.js"></script>
</asp:Content>
javascript查询将数据绑定到jqgrid
jQuery("#jQGridDemo").jqGrid({
ajaxGridOptions: { contentType: "application/json" },
url: 'ForecastWebservice.asmx/GetType',
datatype: "json",
postData: "{}",
colNames: ['TypeID', 'Name'],
colModel: [
{ name: 'TypeID', index: 'aTypeId'},
{ name: 'Name', index: 'aName'}
],
mtype: 'GET',
gridview: true,
sortname: 'aTypeId',
sortorder: 'desc',
caption: "Forecast"
});
这是我在Google Chrome开发者控制台中获得的JSON响应
{"d":"[{\"aTypeId\":1,\"aName\":\"Replacement - Regular\"},{\"aTypeId\":3,\"aName\":\"Development - Replacement\"},{\"aTypeId\":5,\"aName\":\"Growth\"}]"}
请帮忙。我已经疯了javascript编码。如果可能的话,请让我知道如何学习它。我已经完成了C#,vb,SQL,php的编码,但无法获得javascript。它表现得如此无法抑制。
答案 0 :(得分:1)
可以看到一些重要的错误:
"d"
属性中。您必须按使用情况jsonReader: { root: "d", repeatitems: false }
通知jqGrid。GetType
返回string
而不是object
,并且您在GetType
内对JSON进行了序列化。这是错的!您只需返回对象,DotNet将自动序列化为JSON。目前您将对象转换为字符串,DotNet使第二次序列化JSON字符串。由于第二次序列化,可以将结果视为{"d":"[{\"aTypeId\":1,\"aName\":\"Replacement - Regular\"},...]"}
而不是{"d":[{"aTypeId":1,"aName":"Replacement - Regular"},...]}
。loadonce: true
选项。colModel
的列上使用了错误的名称。正确的是[{ name: 'aTypeId'}, { name: 'aName'}]
没有任何index
属性。您应该始终在问题中包含jqGrid的版本以及您使用的fork。我建议您使用最新版本的free jqGrid - 它是我开发的分支。