free jqGrid:在beforeSubmit函数中包装POST数据

时间:2016-12-30 23:58:06

标签: javascript php jqgrid free-jqgrid

我正在使用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, ''] );
            }

不幸的是,这不起作用; console.log(d)很好地打印所需的结果,但postdata没有改变。我并不精通javascript,但我怀疑全局postdata没有从函数内部更改,不幸的是函数不允许我返回它。

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

谢谢。

1 个答案:

答案 0 :(得分:1)

回调beforeSubmit不是您的最佳选择。而不是我建议您使用serializeEditData回调,您可以将其定义为表单编辑选项(在jqGrid的formEditing参数内)或作为jqGrid的参数。回调得到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;
}