表单编辑期间的jqGrid内容类型

时间:2012-11-20 17:11:13

标签: jquery jqgrid

我是jqGrid的新手。但是,成功地能够使用jqGrid开发应用程序主要是在Oleg的答案的帮助下。 我根据下拉选择加载了一个jqGrid。数据从Web Service(asmx)文件返回。 代码有点像这样

jQuery("#list").jqGrid({
    url: '<%= ResolveClientUrl("OfficeData.asmx/GetSCFS_RO") %>',
    editurl: '<%= ResolveClientUrl("OfficeData.asmx/SaveFPSUpdates") %>',
    datatype: "json",
    mtype: 'POST',
    ajaxGridOptions: { contentType: 'application/json; charset=utf-8' }, 
    ajaxEditOptions: { contentType: 'application/json; charset=utf-8', dataType: 'json' },
    serializeGridData: function (postData) {
        // return null;
        if (postData.OfficeId === undefined) { postData.OfficeId = 0; }
        else {
            postData.OfficeId = officeId;
        }
        return JSON.stringify(postData);
    }, 
    jsonReader: { repeatitems: false, root: "d.rows", page: "d.page",
        total: "d.total", records: "d.records" },
    colNames: ['FPSCode',  'Owner Name ', 'Licese_No', 'ShopAddress', 'Village',
        'License Valid From', 'Valid To','FPS Type','WholeSalerName',  'Mobile'],
    colModel: [{ name: 'FPSCode', index: 'FPSCode', width: 60, align: 'left',
        editable:true, editrules:{required:true}, 
        editoptions:{ 
            dataInit: function(element) { 
                $(element).attr("readonly", "readonly"); 
            } 
        }
    },
    ......

Firebug显示以下帖子标题

响应标头

......
Content-Type      application/json; charset=utf-8
Date              Tue, 20 Nov 2012 14:20:34 GMT
Server            ASP.NET Development Server/10.0.0.0
X-AspNet-Version  4.0.30319

请求标题

Accept            application/json, text/javascript, */*; q=0.01
Accept-Encoding   gzip, deflate
Accept-Language   en-US,en;q=0.5
Cache-Control     no-cache
Connection        keep-alive
Content-Length    105
..........

正如预期的那样,我得到的响应是JSON对象。

但是,表单提交始终会将Content-Type作为application/x-www-form-urlencoded; charset=UTF-8

发送

响应标头

Cache-Control     private, max-age=0
Connection        Close
Content-Length    95
Content-Type      text/xml; charset=utf-8
Date              Tue, 20 Nov 2012 14:20:46 GMT
Server            ASP.NET Development Server/10.0.0.0

请求标题

Accept            */*
Accept-Encoding   gzip, deflate
Accept-Language   en-US,en;q=0.5
Cache-Control     no-cache
Connection        keep-alive
Content-Length    254
Content-Type      application/x-www-form-urlencoded; charset=UTF-8
Cookie            ASP.NET_SessionId=utts2wlhdto4xhae34fzqkt4
Host              localhost:18017
Pragma            no-cache
Referer           Account/FPSUpdate.aspx
User-Agent        Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0
X-Requested-With  XMLHttpRequest
X-AspNet-Version  4.0.30319

正如Stackoverflow所建议的,我使用了

ajaxEditOptions:  { contentType: 'application/json; charset=utf-8', dataType: 'json' } , 

我甚至试图在

使用ajaxEditoptions
jQuery.extend(jQuery.jgrid.edit, {
    ajaxEditOptions:  { contentType: 'application/json; charset=utf-8', dataType: 'json' },
    ...
});

Content-Type没有变化。 因此,我总是从服务器获取更新的XML响应。服务器的输出是

<string xmlns="http://tempuri.org/">Data Saved</string>

我无法将Mime类型修复为JSON。请帮忙。

1 个答案:

答案 0 :(得分:1)

首先,我很高兴,我的旧答案可以帮到你。

使用ajaxEditOptions作为jqGrid的选项是非常不正确的。这是editGridRow的选项,因此您必须将其作为属性包含在navGridprmEditprmAdd选项中,或者使用

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

您写道,您尝试使用非常接近的选项。我建议你再次验证它。为了确保该行将被执行,您可以将其包含在JavaScript脚本开头的某个位置。

我个人使用

$.extend($.jgrid.defaults, {
    ajaxGridOptions: { contentType: "application/json" },
    ajaxRowOptions: { contentType: "application/json", async: true },
    ajaxSelectOptions: { contentType: "application/json", dataType: "JSON" },
    ...
});
$.extend($.jgrid.edit, {
    ajaxEditOptions: { contentType: "application/json" },
    recreateForm: true,
    serializeEditData: function(postData) {
        return JSON.stringify(postData);
    },
    ....
});
$.extend($.jgrid.del, {
    ajaxDelOptions: { contentType: "application/json" }
    ...
});

并且一切都按预期工作:可以在相应请求的HTTP标头中看到Content-Type: application/json

UPDATED :我认为jqGrid的奇怪行为的起源是我向trirand here报告的小bug。您可以在jquery.jqGrid.src.js的副本中自行进行相应的修改或保留规则:如果您在$.jgrid.edit ajaxEditOptions中定义了一些非标量(对象)选项,则不应使用以下选项: navGrid。如果您按照the bug report中的描述修改jqGrid的代码,则限制将不再存在。

更新2 :该错误已在github上的主代码中修复(请参阅here)。所以jqGrid的下一个版本(更高版本为4.4.1)不应该有所描述的问题。