Javascript 免费jqGrid:在beforeSubmit函数中包装POST数据

Javascript 免费jqGrid:在beforeSubmit函数中包装POST数据,javascript,php,jqgrid,free-jqgrid,Javascript,Php,Jqgrid,Free Jqgrid,我正在使用Oleg的免费jqGrid。在编辑表单之后,我尝试包装我的POST数据,以便在PHP中获得一个很好的数组,如: Array( oper => edit, data => Array( foo => '123', bar => 'xyz', ... ) ) 其中,运算符和它所操作的数据被很好地分开 我的直觉方法是: beforeSubmit: function( postdata, formid ) {

我正在使用Oleg的免费jqGrid。在编辑表单之后,我尝试包装我的POST数据,以便在PHP中获得一个很好的数组,如:

Array(
oper => edit,
data => Array(
    foo => '123',
    bar => 'xyz',
    ...
    )
)
其中,运算符和它所操作的数据被很好地分开

我的直觉方法是:

            beforeSubmit: function( postdata, formid ) {
                    var d = {};
                    d.data = postdata;
                    console.log( d );
                    postdata = d;
                    return( [true, ''] );
            }
不幸的是,这不起作用;log(d)很好地打印了所需的结果,但postdata没有更改。我并不精通javascript,但我怀疑函数中的全局postdata没有更改,不幸的是,函数不允许我返回它

关于如何解决这个问题的任何建议。这是一个小问题,但我只是认为它看起来更结构化,更易于维护,在操作符和它的数据之间有清晰的分离


谢谢。

提交前的回调
不是您的最佳选择。相反,我建议您使用
serializeEditData
回调,您可以将其定义为表单编辑选项(在jqGrid的
formEditing
参数中)或jqGrid的参数。回调get
postdata
作为唯一的参数,它应该返回JSON字符串的修改对象,该对象应该被发送到服务器。代码可能与以下内容有关

serializeEditData: function (postdata) {
    var d = {
            oper: postdata.oper,
            data: $.extend(true, {}, postdata) // make copy
        };
    delete d.data.oper; // remove unneeded oper property
    return d;
}

在您的情况下,提交前的回调
不是最佳选择。相反,我建议您使用
serializeEditData
回调,您可以将其定义为表单编辑选项(在jqGrid的
formEditing
参数中)或jqGrid的参数。回调get
postdata
作为唯一的参数,它应该返回JSON字符串的修改对象,该对象应该被发送到服务器。代码可能与以下内容有关

serializeEditData: function (postdata) {
    var d = {
            oper: postdata.oper,
            data: $.extend(true, {}, postdata) // make copy
        };
    delete d.data.oper; // remove unneeded oper property
    return d;
}