Json数据不绑定到jqgrid
这是我用jQGrid的第一个例子,我写了下面的代码。显示了.Grid但数据没有绑定。我看了很多例子,但没有找到答案
这是我的Jquery代码
jQuery("#jQGridDemo").jqGrid({ url: 'http://localhost:7887/application/get', datatype: "json", contentType: 'application/json; charset=utf-8', page: 1, loadonce: true, gridView: true, loadonce: true, colNames: ['Application ID', 'Application Name', 'PageLink', 'CreatedDate'], colModel: [ { name: 'ApplicationId', key: true, width: 75 }, { name: 'ApplicationName', width: 150 }, { name: 'PageLink', width: 150 }, { name: 'CreatedDate', width: 150 } ], width: 750, height: 250, rowNum: 20, scroll: 1, // set the scroll property to 1 to enable paging with scrollbar - virtual loading of records emptyrecords: 'Scroll to bottom to retrieve new page', // the message will be displayed at the bottom })
我正在使用Web API 2这是c#代码
[Route("get")] [HttpGet] public HttpResponseMessage GetApplicationData() { //string pno = Request.RequestUri.ToString(); DataSet ds = new DataSet(); FillDataSet(ref ds); DataTable dt = ds.Tables[0]; var Jsonresponse = JsonConvert.SerializeObject(dt); return Request.CreateResponse(HttpStatusCode.OK, Jsonresponse); }
响应看起来像以下格式..
"[{\"ApplicationId\":1,\"ApplicationName\":\"Home\",\"PageLink\":\"~/web/Index.aspx\",\"CreatedDate\":\"2013-08-14T12:09:07.93\"},{\"ApplicationId\":2,\"ApplicationName\":\"Identify\",\"PageLink\":\"~/Web/Material/Home.aspx\",\"CreatedDate\":\"2013-08-14T12:09:07.93\"}........]"
任何人都可以告诉我为什么这些数据没有绑定到网格上,请提示一些参考资料来学习使用JQGrid
我建议你做以下事情:
- 从
url: 'http://localhost:7887/application/get'
移除http://localhost:7887
前缀url: 'http://localhost:7887/application/get'
。 对应于同源策略,您不能将默认情况下的Ajax请求作为HTML页面的源(另一个服务器或其他端口)作为另一个源。 因此,最好在URL中使用绝对路径'/application/get'
或相对路径'application/get'
。 - 您应该删除JavaScript代码中的语法错误。 例如,
loadonce: true
两次使用是语法错误。 - JavaScript是区分大小写的语言。 所以你应该仔细考虑你使用的所有参数。 例如,没有
gridView
选项。 您应该使用gridview: true
。 - 我不建议你至少在开头使用
scroll: 1
。 虚拟滚动在使用其他方法时存在许多小问题和限制。 而不是你可以使用toppager: true
来添加标准的寻呼机。 - 我建议你使用
height: "auto"
和autoencode: true
选项。 - jqGrid没有
contentType
选项。 你的意思是ajaxGridOptions: {contentType: 'application/json; charset=utf-8'}
ajaxGridOptions: {contentType: 'application/json; charset=utf-8'}
现在我认为您的代码服务器部分存在问题。 如果使用datatype: "json"
则HTTP请求将在HTTP标头中具有Accept: application/json
。 因此,通常使用IEnumerable
类的东西作为GetApplicationData()
的结果值。 Web API 2将根据Accept: application/json
自动将结果对象转换为JSON。 如果您不需要手动转换为JSON,那么Web API 2将假定字符串(而不是项目数组)是返回的数据类型。 对应于JSON标准所有引号"
将被转义。因此响应包含字符串
"[{\"ApplicationId\":1,\"ApplicationName\":\"Home\",...}...]"
代替
[{"ApplicationId":1,"ApplicationName":"Home",...}...]
要解决此问题,您应该更改GetApplicationData()
的返回类型并删除不需要的JsonConvert.SerializeObject
手动调用。
我建议您使用IE / Chrome / Firefox的Fiddler或开发人员工具(按F12启动)来跟踪客户端和服务器之间的HTTP流量。 这对于共同理解和故障排除非常重要。