设置jQuery jqGrid执行的请求的内容类型
我使用的是最新版本的jqGrid :3.6.4
这似乎是一个简单的问题(或者至少它在我花了几个小时之前做过):
当网格向服务器发送请求(到控制器操作)时,其内容类型始终为:
application/x-www-form-urlencoded; charset=UTF-8
我希望它是:
application/json; charset=utf-8
但是我找不到设置内容类型的方法(例如,没有像在$ .ajax调用中找到的那样的contentType选项)。
所以只是为了澄清,我不是问如何在jQuery服务器请求上设置内容类型,而是专门使用jqGrid,它没有提供明显的选项来执行此操作。
谢谢,奈杰尔。
更新: Oleg的修复解决了它。
以下是网格的选项设置:
jQuery("#ContactGridList").jqGrid({ url: '/ContactSelect/GridData/', datatype: 'json', ajaxGridOptions: { contentType: 'application/json; charset=utf-8' }, mtype: 'POST', ...
如何在grid.base.js的代码中找到填充网格的$.ajax
调用包含如下所示:
$.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));
因此,您可以使用ajaxGridOptions
选项来设置或覆盖$.ajax
请求的任何参数。 因为我只使用JSON请求到我的服务器,所以我设置了contentType
常规设置
$.extend($.jgrid.defaults, { datatype: 'json', {ajaxGridOptions: { contentType: "application/json" }, {ajaxRowOptions: { contentType: "application/json", type: "PUT" }, ... });
在ajaxRowOptions
中使用ajaxRowOptions进行行编辑。 对于表单编辑,还有其他参数,我也将其设置为全局设置:
$.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"
”仅用于“编辑”,所以我在navGrid()
参数中执行此操作。
您可以找到的最后一个ajax参数也是有趣的设置是ajaxSelectOptions
。 您可以使用与ajaxGridOptions
相同的方式进行ajaxGridOptions
。 如果在editoptions
或searchoptions
使用dataUrl
参数, editoptions
dataUrl
参数很有用。 例如, dataUrl
在colModel
使用dataUrl
来定义edittype: 'select'
类型的edittype: 'select'
。 select服务器的可能值将从服务器加载以进行内联或表单编辑或在搜索对话框内部。 因为对于这样的数据加载使用了ajax,所以有相应的ajaxSelectOptions
选项。
最好的祝福。