2010-04-20 73 views
22

我使用的是最新版本的jqGrid:3.6.4设置内容类型的jQuery执行请求的jqGrid

这似乎是一个简单的问题(或者至少它没有之前,我花了几个小时就可以了):

当电网发送一个请求给服务器(到控制器动作),其内容类型是始终:

application/x-www-form-urlencoded; charset=UTF-8 

,我希望它是:

application/json; charset=utf-8 

,但我找不到任何设置内容类型的方式(有,你会发现在$就调用例如没有的contentType选项)。

所以只是为了澄清,我不是问如何设置一个jQuery服务器请求的内容类型,但具体使用的jqGrid,它不提供这样一个明显的选择。

谢谢,奈杰尔。

更新: 奥列格的回答固定解决了它。

下面是网格的选项设置:

jQuery("#ContactGridList").jqGrid({ 
     url: '/ContactSelect/GridData/', 
     datatype: 'json', 
     ajaxGridOptions: { contentType: 'application/json; charset=utf-8' }, 
     mtype: 'POST', 
     ... 

回答

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请求到我的服务器,我喜欢设置

$.extend($.jgrid.defaults, { 
    datatype: 'json', 
    {ajaxGridOptions: { contentType: "application/json" }, 
    {ajaxRowOptions: { contentType: "application/json", type: "PUT" }, 
    ... 
}); 

ajaxRowOptionscontentType一般设置在grid.inlinedit.js为行编辑使用。对于表格编辑还有其他的参数,这是我设置也可以作为全局设置:

$.extend($.jgrid.edit, { 
    ajaxEditOptions: { contentType: "application/json" }, 
    ... 
}); 

$.extend($.jgrid.del, { 
    ajaxDelOptions: { contentType: "application/json" }, 
    mtype: "DELETE", 
    ... 
}); 

我的服务器你怎么能看到的是一个问题的REST服务(主要是发达国家在WFC和ASP.NET MVC的其余部分)。由于$.jgrid.edit是“添加”和“修改”项目的设置,因此我无法仅更改进行“编辑”,因此我在navGrid()的参数中执行此操作。

,你也觉得有趣的设置

最后阿贾克斯参数是ajaxSelectOptions。您可以按照与ajaxGridOptions相同的方式进行设置。如果在editoptionssearchoptions内使用dataUrl参数,则ajaxSelectOptions的参数很有用。我在colModel的内部使用dataUrl来定义edittype: 'select'类型的列。选择选项的可能值将从服务器加载,以进行内联或表单编辑或搜索对话框内。因为对于这样的数据加载使用ajax,所以有相应的ajaxSelectOptions选项。

此致敬礼。

+0

谢谢奥列格!那样做了;我在示例中添加了示例代码。 – Nigel 2010-04-20 23:13:54

+0

很奇怪!我也使用jqGrid 3.6.4。因为我使用jQuery 1.4.2,所以我必须使用http://github.com/tonytomov/jqGrid的版本,但是从3.6(3.6.0)开始,存在ajax功能。您可以在您的jqGrid版本中搜索ajaxGridOptions以验证它。我建议你从http://github.com/tonytomov/jqGrid加载最后一个未压缩版本的jqGrid,修改你的代码以使用这个js-files(例如grid.loader.js),在grid.base.js里设置断点(搜索.ajax)和jQuery.ajax(也是未压缩的jquery-1.4.2.js)。您也可以使用$ .jgrid.defaults进行一项测试。 – Oleg 2010-04-20 23:20:09

+0

恭喜!!!一个好问题就是解决问题! – Oleg 2010-04-20 23:36:39