当contentType=application/json时,Jquery JQGrid会出现问题。
当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
问题原因:
问题的根本原因是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服务的方法的原型。