我使用的是最新版本的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', ...
Oleg.. 26
如何在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
jqGrid选项来设置或覆盖任何$.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"
仅为"编辑" 更改,所以我在参数中执行此操作navGrid()
.
您可以找到的最后一个ajax参数也很有趣ajaxSelectOptions
.您可以按照相同的方式设置它ajaxGridOptions
.ajaxSelectOptions
如果dataUrl
在editoptions
or中使用参数,则参数很有用searchoptions
.例如,我dataUrl
在内部colModel
用于定义类型的列edittype: 'select'
.select服务器的可能值将从服务器加载以进行内联或表单编辑或在搜索对话框内部.因为对于这样的数据加载使用了ajax,所以有相应的ajaxSelectOptions
选项.
最好的祝福.
如何在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
jqGrid选项来设置或覆盖任何$.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"
仅为"编辑" 更改,所以我在参数中执行此操作navGrid()
.
您可以找到的最后一个ajax参数也很有趣ajaxSelectOptions
.您可以按照相同的方式设置它ajaxGridOptions
.ajaxSelectOptions
如果dataUrl
在editoptions
or中使用参数,则参数很有用searchoptions
.例如,我dataUrl
在内部colModel
用于定义类型的列edittype: 'select'
.select服务器的可能值将从服务器加载以进行内联或表单编辑或在搜索对话框内部.因为对于这样的数据加载使用了ajax,所以有相应的ajaxSelectOptions
选项.
最好的祝福.