当我在jqGrid中设置postData,它在重载时没有正确序列化

当我在jqGrid中设置postData,它在重载时没有正确序列化

问题描述:

我有最初是空的jqGrid(我只在_search为真时才从服务器返回数据)。 这是电网代码:当我在jqGrid中设置postData,它在重载时没有正确序列化

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包含的搜索相同的方式工作,因为我已经为这种情况完成了服务器端代码。

您以错误的方式构建了filters。例如,代替使用​​,关于JSON.stringifyfilters的值必须是JSON编码(参见the documentation)。 The answer包含相应的代码示例。

修订:中postData定义可以是有关以下

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

喝彩!你是天才! :)这只是**完全**我想得到的答案,我很久以前使用JSON.stringify,完全忘了它,并知道我错过了一些东西,但不记得是什么:) – 2011-05-31 20:00:42

+0

@obrad:谢谢!不用谢! – Oleg 2011-05-31 20:51:01