设置由jQuery jqGrid执行的请求的内容类型

前端之家收集整理的这篇文章主要介绍了设置由jQuery jqGrid执行的请求的内容类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用最新版本的 jqGrid:3.6.4

这似乎是一个简单的问题(或至少在我花了几个小时之前)

当网格向服务器(对控制器动作)发送请求时,其内容类型始终为:

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',...

解决方法

如何在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" },...
});

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选项。

最好的祝福。

猜你在找的jQuery相关文章