【问题标题】:jqgrid send data to server with data type being localjqgrid 将数据发送到数据类型为本地的服务器
【发布时间】:2013-03-28 04:15:50
【问题描述】:

我想发送要更新的行数据,但是当创建 jqgrid 时,数据类型设置为“本地”。我正在尝试在 onSubmiClick 中设置 dataType : "json" 并希望发送行数据(要发布到 REST 方法的数据)。这是我的 JqGrid 代码块。任何帮助表示赞赏。

var editSettings = {
recreateForm:true,
jqModal:false,
reloadAfterSubmit:true,
closeOnEscape:true,
closeAfterEdit:true,
addCaption: "Edit Scripts",
onclickSubmit: function(params,postdata) {
    $.ajax({ 
    type : "POST",
    url : "/fnol-maintenance/reports/update",
    contentType : "application/json; charset=utf-8",
    data : {
         jqGridData : postdata    //I'm trying to figure out how to pass the row data being edited using jQgrid Form Edit.
       },
    dataType : "json",
    asynch : false
    });
    return{};
}};

myGrid = $("#mygrid").jqGrid({
caption: "FNOL Maintenance Report",
datatype: "local",
colNames: myColNames,
colModel: myColModel,
pager: '#mypager',
//rowNum: 10000,
rowList: [10, 20, 50, 100],
viewrecords: true,
autowidth: true,
gridview: true,
ignorecase: true,
altRows: true,
altclass: 'myAltRowClass',
height: gridHeight, //commented to use browser vertical scrollbar
//height: "100%",   //un-commented to use browser vertical scrollbar
loadtext: "Loading data...",
//forceFit: true
//headertitles: true,
footerrow: true,
userDataOnFooter: true,
editUrl: '/fnol-maintenance/reports/update'
});
myGrid.jqGrid('navGrid','#mypager',{edit:true,add:false,del:false,search:false}, editSettings );
jQuery("#mygrid").jqGrid('setCaption', (myjsongrid.reportTitle==""?'Maintenance Report':myjsongrid.reportTitle));
myGrid.setGridParam({datatype: "local"});
myGrid.setGridParam({data: mydata}).trigger("reloadGrid");
//jQuery("#mygrid").jqGrid('navGrid','#mypager',{del:false,add:false,edit:true,search:false});
//alert("after ajax");

【问题讨论】:

  • onclickSubmit() 的ajax 调用之前如何调用myGrid.setGridParam({datatype: "json"}); 行,然后使用你的ajax 调用。

标签: jqgrid


【解决方案1】:

您发布的代码很奇怪。首先你使用未定义的变量editSettings。该值稍后将分配给editSettings。不应该奇怪回调onclickSubmit 不会被调用。

同样,我看不到您在哪里定义 myGridmydata 等。您使用的是真实代码吗?

顺便说一句,我认为在不指定 data 参数的情况下创建 jqGrid 然后使用 setGridParamdatatype 设置为“本地”(它已经是“本地”)是没有意义的,更改 data 参数并重新加载网格。创建网格时直接使用data: mydata参数即可。

我认为在 onclickSubmit 内部使用 $.ajax 手动将数据发布到服务器没有任何意义,因为 jqGrid 在内部执行相同的操作。如果您需要一些将发送到服务器的自定义数据序列化,您可以使用serializeEditData 回调。如果您只需要设置$.ajax 的一些附加选项(如contentType),您可以使用ajaxEditOptions 选项。

【讨论】:

  • EditSettings 在网格上方定义,但是当我发布问题时,我将它们的顺序错误。我的错。
  • 我在定义网格时以及在使用重新加载网格之前将数据类型设置为本地
  • @Arvind:您能更正您发布的代码吗?你明白我关于使用ajaxEditOptions 和可选serializeEditData 的建议吗?
  • 在定义网格时以及在使用 codemyGrid.setGridParam({datatype: "local"}); 重新加载网格之前,我已将数据类型设置为本地。我的理解是这个数据类型设置是针对网格数据的。当我打开一个表单来编辑一行时,如果我没有在 editSettings 中定义 $.ajax,我会收到错误“Url is not Set”。我不想传递任何自定义数据,但我想将我正在编辑的实际行数据作为 JSON 字符串传递给服务器。不幸的是,我无法完成这项工作。如何为表单数据和服务器 URL 设置数据类型:“json”。
  • @Arvind:你是否像我建议的那样使用了ajaxEditOptions 选项?您应该将其设置为editSettings 的一部分。例如var editSettings = {recreateForm:true, ajaxEditOptions: { contentType: "application/json" }, serializeEditData: function (postdata) { return JSON.stringify(postdata); }, ....};。您可以修改serializeEditData 的代码以发送jqGridData: JSON.stringify(postdata)JSON.stringify(jqGridData: postdata) 或其他。你可以通过修改$.jgrid.edit来设置默认选项见here
猜你喜欢
  • 2014-04-14
  • 2019-02-23
  • 2011-03-11
  • 1970-01-01
  • 2019-09-10
  • 2010-12-29
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多