JQGrid在editRow上发布JSON数据

时间:2012-08-29 10:50:22

标签: json jqgrid

我想将json数据发布到服务器(REST API)。当我现在双击一行进行内联编辑时,会调用'serializeRowData'并且我的服务器在正文中接收json格式的消息。但是当我点击寻呼机中的小“+”图标时,不会调用'serializeRowData'。

我正在使用版本:

  • JQuery 1.5.2
  • JQGrid 4.4.1

我的网格看起来像:

$("#dbgrid").jqGrid({ 
    url: 'rest/config/dbs',
    editurl: 'rest/config/db',
    datatype: "json", 
    height: 255, 
    width: 600, 
    colNames:['ID', 'Env', 'Hostname', 'Name', 'Port', 'Service Name', 'SID'], 
    colModel:[ 
        {name:'id',index:'id', width:30, sorttype:'int'}, 
        {name:'env',index:'env', editable:true, width:50}, 
        {name:'hostName',index:'hostName', editable:true, width:200},
        {name:'name',index:'name', editable:true, width:200},
        {name:'port',index:'port', editable:true, width:30},
        {name:'serviceName',index:'name', editable:true, width:30},
        {name:'sid',index:'sid', editable:true, width:30}
    ], 
    jsonReader: {
        repeatitems: false,
        id: "id",
    },
    rowNum:50, 
    rowTotal: 2000, 
    rowList : [20,30,50], 
    loadonce:false, 
    mtype: "GET", 
    rownumbers: true, 
    rownumWidth: 40, 
    gridview: true, 
    pager: '#pdbgrid', 
    sortname: 'id', 
    viewrecords: true, 
    sortorder: "asc", 
    caption: "Database Servers"  ,
    ajaxRowOptions : {
        type :"POST",
        contentType :"application/json; charset=utf-8",
        dataType :"json"
    },
    serializeRowData: function(postdata){     
        return JSON.stringify(postdata);
    }
});
$("#dbgrid").jqGrid('navGrid','#pdbgrid',{edit:true,add:true,del:true}

我错过了什么吗?

任何帮助以及示例都将非常受欢迎。

2 个答案:

答案 0 :(得分:4)

因为内联编辑不会出现这种情况。您可以像这样更改代码的最后一行。

$("#dbgrid").jqGrid('navGrid','#pdbgrid',{edit:true,add:true,del:true},
{//edit parameters},

{//add parameters
serializeEditData: function (postdata) {}
},

{//delete parameters}
);

现在,如果您想序列化编辑数据,那么您也可以在编辑参数中编写相同的功能。此功能适用于添加和编辑。对于删除,它将是serializeDelData。

我希望它可以帮到你。

答案 1 :(得分:3)

如果有人在这里遇到同样的问题,那就是一个可行的解决方案:

...
$("#dbgrid").jqGrid('navGrid','#pdbgrid',
    {edit:true,add:true,del:true},
    {
        //edit parameters
        ajaxEditOptions: jsonOptions,
        serializeEditData: createJSON,
        closeAfterEdit: true
    },
    {
        //add parameters
        ajaxEditOptions: jsonOptions,
        serializeEditData: createJSON,
        closeAfterAdd: true
     },
     {
         //delete parameters
         ajaxDelOptions: jsonOptions,
         serializeDelData: createJSON
     }
);

var jsonOptions = {
    type :"POST",
    contentType :"application/json; charset=utf-8",
    dataType :"json"
};

function createJSON(postdata) {
    if (postdata.id === '_empty')
        postdata.id = null; // rest api expects int or null
    return JSON.stringify(postdata)
}