当contentType=application/json时,Jquery JQGrid会出现问题。

10 浏览
0 Comments

当contentType=application/json时,Jquery JQGrid会出现问题。

我不得不使用$.ajaxSetup()来全局改变contentType为application/json。

(参见这个问题,了解为什么我不得不使用application/json:ASPNET MVC - 当字段确实有值时,为什么ModelState.IsValid为false "The x field is required"?

但是这会导致jquery jqrid出错,错误信息为:

Invalid JSON primitive: _search

它试图发送的POST数据是:

_search=false&nd=1274042681880&rows=20&page=1&sidx=&sord=asc

这显然不是JSON格式,所以当然会失败。有没有办法告诉jqrid使用哪种contenttype?

我在jqrid的wiki上搜索过,但实际上没有太多关于任何东西的文档。

http://www.trirand.com/jqgridwiki/doku.php?do=search&id=contenttype&fulltext=Search

0
0 Comments

问题原因:

问题的根本原因是JQGrid在contentType为application/json时出现错误。在之前的回答中,提到了使用ajaxGridOptions参数来替代通过$.ajaxSetup覆盖全局设置。

解决方法:

此外,在相同的回答中还提到了如何使用serializeGridData参数来自定义序列化。在"How do I build a JSON object to send to an AJAX WebService?"的回答中,可以了解到参数的JSON编码应该是什么样子的。

如果你仍然在使用serializeGridData和ajaxGridOptions时遇到问题,你应该在问题中包含使用jqGrid的代码片段以及你使用的Web服务的方法的原型。

0
0 Comments

在设置jqGrid或其数据源时,将其dataType设置为JSON("json"),如下所示:

$("#myTable").jqGrid ({
  //其他选项...
  dataType : 'json'
});

你也可以在code project上看到一个示例。

小提醒:为了在相应的jQuery.ajax请求中接收dataType: 'json',应该将jqGrid的参数设置为datatype: 'json'(参见trirand.com/jqgridwiki/doku.php?id=wiki:options)。

0