这似乎是一个简单的问题(或至少在我花了几个小时之前)
当网格向服务器(对控制器动作)发送请求时,其内容类型始终为:
application/x-www-form-urlencoded; charset=UTF-8
我希望是:
application/json; charset=utf-8
但是我没有办法设置内容类型(没有contentType选项,例如您可以在$ .ajax调用中找到)。
所以只是为了澄清,我不是问如何在jQuery服务器请求上设置内容类型,而是特别使用jqGrid,这并不能提供一个明显的选择。
谢谢,Nigel。
更新:
奥列格的答复解决了它。
以下是网格的选项设置:
jQuery("#ContactGridList").jqGrid({ url: '/ContactSelect/GridData/',datatype: 'json',ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },mtype: 'POST',...
解决方法
$.ajax($.extend({ url: ts.p.url,type: ts.p.mtype,dataType: dt,data: $.isFunction(ts.p.serializeGridData) ? ts.p.serializeGridData.call(ts,ts.p.postData) : ts.p.postData,complete: function (req,st) { ... } ... },$.jgrid.ajaxOptions,ts.p.ajaxGridOptions));
因此,您可以使用jqGrid的ajaxGridOptions选项来设置或覆盖$ .ajax请求的任何参数。因为我只使用JSON请求给我的服务器,所以我设置了contentType的一般设置
$.extend($.jgrid.defaults,{ datatype: 'json',{ajaxGridOptions: { contentType: "application/json" },{ajaxRowOptions: { contentType: "application/json",type: "PUT" },... });
ajaxRowOptions在grid.inlinedit.js中用于行编辑。对于表单编辑,还有其他参数,我也设置为全局设置:
$.extend($.jgrid.edit,{ ajaxEditOptions: { contentType: "application/json" },... }); $.extend($.jgrid.del,{ ajaxDelOptions: { contentType: "application/json" },mtype: "DELETE",... });
如何看到我的服务器是一个RESTfull服务(主要在WFC开发,其余的在ASP.NET MVC中)。因为$ .jgrid.edit是“添加”和“修改”项的设置,所以我无法更改mtype:“PUT”用于“edit”,所以我在navGrid()的参数中执行此操作。
你可以找到的最后一个ajax参数也很有意思是ajaxSelectOptions。您可以以与ajaxGridOptions相同的方式进行设置。如果在editoptions或searchoptions中使用dataUrl参数,则ajaxSelectOptions的参数很有用。例如,我使用colModel里面的dataUrl来定义类型为edittype的列:’select’。 select选项的可能值将从服务器加载到内联或表单编辑或搜索对话框内。因为这样的数据加载使用ajax,所以有相应的ajaxSelectOptions选项。
最好的祝福。