【问题标题】:jqGrid not POSTing to server with any data from inline editjqGrid 不使用来自内联编辑的任何数据发布到服务器
【发布时间】:2014-10-24 05:09:09
【问题描述】:

到目前为止,我真的很喜欢 jqGrid,但仍然不知道如何在内联编辑后保存单元格时将数据 POST 到服务器。尝试了许多不同的配置,并仔细阅读了文档,但仍然无法破解。

jqGrid 确实在调用我指定的 url,但我没有看到另一边的任何一天。

还有什么奇怪的是,据我了解,如果 jqGrid 配置中不存在任何参数,则调用应该获取编辑中指定的 url 并保存参数,但情况似乎并非如此。当我从配置中删除 editurl 和 cellurl 时,保存错误为“未指定 url”。

提前致谢!

这是 JS:

editParams = {
    "oneditfunc": null,
    "successfunc": null,
    "url": '/submit/adjustments',
    "extraparam": {
        UserAdj: function() {
            var sel_id = $('#rowed1').jqGrid('getGridParam', 'selrow');
            var value = $('#rowed1').jqGrid('getCell', sel_id, '_id');
            return 'test';
        },
        arg1 : 'test_it_out'
    },
    "aftersavefunc": null,
    "errorfunc": null,
    "afterrestorefunc": null,
}

saveparameters = {
    "successfunc" : null,
    "url" : 'submit/adjustments',
        "extraparam" : {
            UserAdj: function() {
            var sel_id = $('#rowed1').jqGrid('getGridParam', 'selrow');
            var value = $('#rowed1').jqGrid('getCell', sel_id, '_id');
            return 'test';
        }
        },
    "aftersavefunc" : null,
    "errorfunc": null,
    "afterrestorefunc" : null,
    "restoreAfterError" : true,
    "mtype" : "POST"
}

jQuery("#rowed1").jqGrid({
    url: base_url + 'get/101/items',
    datatype: "json",
    jsonReader: {
        root: function (obj) { return obj.items; },
        id: 'id',
        page: function () { return 1; },
        total: function () { return 1; },
        records: function (obj) { return obj.items.length; },
    },
    loadonce: true,
    colNames:['Vendor', 'Name', 'Price', 'Last Cost', 'Qty OH', 'Qty OO', 'Wks Selling', 'Str Velocity', 'Fleet Velocity', 'Reccomended Buy', 'User Adjustment'],
    colModel:[
        {name: 'vendor_name'},
        {name: 'name'},
        {name: 'price'},
        {name: 'cost'},
        {name: 'qty_OH', sorttype:'int'},
        {name: 'qty_OO', sorttype:'int'},
        {name: 'str_wks_selling', sorttype:'int'},
        {name: 'velocity', sorttype:'int'},
        {name: 'flt_five_wk_vel', sorttype: 'int'},
        {name: 'rec_buy', sorttype: 'int'},
        {name: 'user_adj_order', editable: true}
    ],
    onSelectRow: function(id){
         if(id && id!==lastSel){ 
            jQuery('#rowed1').restoreRow(lastSel); 
            jQuery("#rowed1").jqGrid('saveRow', lastsel, saveparameters);
            lastSel=id; 
         }
       },
    ondblClickRow: function(id) {
        jQuery('#rowed1').jqGrid('editRow', id, true, editParams); 
    },
    rowNum:10,
    rowList:[10,20,30],
    pager: '#prowed1',
    sortname: 'name',
    viewrecords: true,
    sortorder: "desc",
    autowidth: true,
    height: '100%',
    'cellEdit': true,
    'cellSubmit': 'remote',
    editurl: '/submit/adjustments',
    cellurl: '/submit/adjustments'
});

以及控制器代码:

@app.route('/submit/adjustments', methods=['GET', 'POST'])
def submit_adjustments():
    print request.data
    print request.args
    return redirect(redirect_url())

【问题讨论】:

    标签: jquery python post jqgrid flask


    【解决方案1】:

    我在阅读过程中发现的一些错误:

    • 不能在一个网格中结合单元格编辑和内联编辑。在我看来,您的主要问题在于 cellEdit: true 选项的使用。 您必须删除选项 cellEdit: true 才能使用内联编辑。
    • onSelectRowsaveRow 的行永远不会起作用,因为前一行包含 restoreRow。因此,您首先放弃编辑结果,然后尝试保存它。
    • 您仅在saveparameters 中指定mtype : "POST",而不在editParams 中指定。因为直接调用的saveRow 在您的代码中不起作用,所以不会使用该选项。幸运的是mtype : "POST"默认 内联编辑选项。尽管如此,我还是建议您使用所有内联编辑选项定义一个对象,并在您调用的所有方法中使用它(editRowsaveRowrestoreRow)。
    • 您定义的UserAdj 函数似乎很奇怪,因为它使用了$('#rowed1').jqGrid('getCell', sel_id, '_id'),但网格不包含名称为_id 的列。
    • 我建议您在所有 jqGrids 中使用 gridview: true 选项。它提高了网格的性能。
    • 考虑使用网格的autoencode: true 选项。如果您不使用它,输入数据将被解释为
    • 我建议您在 jqGrid 的所有回调中使用 jQuery(this) 而不是 jQuery('#rowed1')
    • 不要忘记定义变量lastSel

    【讨论】:

    • 谢谢,奥列格。听起来像很多小事。我现在收到一条错误消息,提示我的“editRow”和“saveRow”函数未定义,但我认为我的所有库都已正确加载。我将为此开始另一个问题,然后回到这个来完成内联编辑功能
    • 您的回答非常宝贵!
    • @luca76:我很高兴这个答案也能帮助到你。不客气!
    猜你喜欢
    • 1970-01-01
    • 2016-02-03
    • 2012-08-29
    • 2016-08-29
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 2011-10-26
    相关资源
    最近更新 更多