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