【问题标题】:when I set postData in jqGrid, it is not serialized properly on reload当我在 jqGrid 中设置 postData 时,它在重新加载时没有正确序列化
【发布时间】:2011-05-31 11:49:38
【问题描述】:

我有 jqGrid,它最初是空的(我只在 _search 为真时从服务器返回数据)。 这是网格代码:

jQuery(gridId).jqGrid({
                    url : '/controller/GetData',
                    height : 100,
                    multiplesearch : true,
                    datatype : "json",
                    mtype : "POST",
                    rowNum : 10,
                    rowList : [ 10, 20, 30 ],
                    sortname : 'LBONumber',
                    sortorder : "desc",
                    viewrecords : true,
                    onSelectRow: jqGridRowSelected,
                    caption : 'DATA',
                    colNames : ["LBO","First name","Adress"],
                    colModel : [{"name":"LBONumber","index":"LBONumber","hidden":false},{"name":"FirstName","index":"FirstName","hidden":false},{"name":"Adress","index":"Adress","hidden":false},
    });

我有一个 ID 为“LBO”的文本字段,点击一个按钮我执行以下代码:

$(gridId).setGridParam({
                            search: true,
                            postData: {
                                'filters':$.param({
                                    'groupOp': 'AND',
                                    'rules': [{ "field": 'LBONumber', "op": 'eq', "data": function () { return $("#LBO").val() } }]
                                })
                            }
                        });

我的问题是请求正文,即:

_search=true&nd=1306834594225&rows=10&page=1&sidx=LBONumber&sord=desc&filters%5BgroupOp%5D=AND&filters%5Brules%5D%5B0%5D%5Bfield%5D=LBONumber&filters%5Brules%5D%5B0%5D%5Bop%5D=eq&filters%5Brules%5D%5B0%5D%5Bdata%5D=333

它应该说...filters=...,而不是...filters%5B...,我不想在服务器上处理它,它必须是使这项工作的正确方法。我知道这实际上是正确序列化的对象,但我需要这个函数以与 jqGrid 包含的搜索相同的方式工作,因为我已经为这种情况完成了服务器端代码。

【问题讨论】:

    标签: jqgrid http-post jqgrid-asp.net


    【解决方案1】:

    您以错误的方式构造filters。例如,对于 JSON.stringifyfilters 的值必须是 JSON 编码(参见 the documentation),而不是使用 $.paramThe answer 包含相应的代码示例。

    更新postData的定义大概如下

    postData: {
        filters: function () {
            return JSON.stringify(
                { groupOp: "AND", rules: [
                    { field: 'LBONumber', op: 'eq', data: $("#LBO").val() }
                ]}
            );
        })
    }
    

    【讨论】:

    • 太棒了!你真是天才! :) 这只是正是我想要得到的答案,我很久以前使用 JSON.stringify,完全忘记了它,知道我遗漏了一些东西,但不记得是什么 :)跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2015-12-04
    • 2011-09-05
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多