1

我想将 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}

我错过了什么吗?

任何帮助以及示例将不胜感激。

4

2 回答 2

4

因为那不包括在内联编辑中。您可以像这样更改代码的最后一行。

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

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

{//delete parameters}
);

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

我希望它对你有帮助。

于 2012-08-29T11:01:24.027 回答
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)
}
于 2012-08-29T20:56:47.427 回答