2012-11-20 31 views
3

我是jqGrid的新手。但是,成功地使用jqGrid主要借助Oleg的答案来开发应用程序。 我加载一个jqGrid的基础上下拉选择。数据是从Web服务(asmx)文件返回的。 的代码是一些这样的事jqGrid内容类型在表单编辑

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

萤火虫显示以下帖子标题

响应头

...... 
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-Typeapplication/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 

正如处为建议tackoverflow我用

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

我想即使在

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

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

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

我无法修复,MIME类型为JSON。请帮忙。

回答

0

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

使用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

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

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

+0

谢谢,不用你的答案和代码我无法完成它。顺便说一句,我总是做一个谷歌,像JQGrid 奥列格。刚才可以找出问题。在我的代码中有一个navGrid方法,它是.jqGrid('navGrid','#pager',{edit:true,add:false,del:false,refresh:true,search:true}, { closeAfterEdit:false }); });我觉得这是覆盖写入ajaxEditOptions的jQuery.jgrid.edit。因为当我将ajaxEditOptions放入navGrid方法的时候,它正在发送一个正确的哑剧。你怎么看? – Dibs

+0

您可以使用'.extend($ .jgrid.edit,{ajaxEditOptions:{contentType:“application/json”}});''或者您可以使用'.jqGrid('navGrid','#pager',{edit :true,add:false,del:false,refresh:true,search:true},{closeAfterEdit:false,ajaxEditOptions:{contentType:“application/json”}});'。 **这两种方式应该工作**。如果它不起作用,你可以发布我的网址与演示重现问题的演示。请在演示中使用'jquery.jqGrid.src.js'。 – Oleg

+0

他们都应该工作。但是,如果同时使用(无意)与navGrid具有.jqGrid('navGrid','#pager',{edit:true,add:false,del:false,refresh:true,search:true},{closeAfterEdit :false和$ .extend有一个AjaxEditOptions。在我的情况下,它发送一个MIME类型的text/xml,当我删除$ .extend中的ajaxEditOptions,并将其放入navGid方法时,它开始发送正确的MIME,再次感谢Oleg。 – Dibs