当前位置:  开发笔记 > 后端 > 正文

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

如何解决《设置jQueryjqGrid执行的请求的内容类型》经验,为你挑选了1个好方法。

我使用的是最新版本的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));

因此,您可以使用ajaxGridOptionsjqGrid选项来设置或覆盖任何$.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如果dataUrleditoptionsor中使用参数,则参数很有用searchoptions.例如,我dataUrl在内部colModel用于定义类型的列edittype: 'select'.select服务器的可能值将从服务器加载以进行内联或表单编辑或在搜索对话框内部.因为对于这样的数据加载使用了ajax,所以有相应的ajaxSelectOptions选项.

最好的祝福.



1> Oleg..:

如何在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));

因此,您可以使用ajaxGridOptionsjqGrid选项来设置或覆盖任何$.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如果dataUrleditoptionsor中使用参数,则参数很有用searchoptions.例如,我dataUrl在内部colModel用于定义类型的列edittype: 'select'.select服务器的可能值将从服务器加载以进行内联或表单编辑或在搜索对话框内部.因为对于这样的数据加载使用了ajax,所以有相应的ajaxSelectOptions选项.

最好的祝福.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有