jqGrid以setGridParam方式postData,包含历史数据的问题

Posted xstarmoony

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jqGrid以setGridParam方式postData,包含历史数据的问题相关的知识,希望对你有一定的参考价值。

  系统在使用jqGrid时,如果某些页面的查询项是复选框,后台是数组接收的,就会出现传值不正确问题。

1、项目中某查询页面存在的复选框:技术图片待处理S1,正在处理S2,已处理S3;

使用jqGrid提交查询数据方法如下:

$("#xxTable").setGridParam(

  datatype : "json",
  postData: 
    "id" : $("#id").val(),
    "nodeStatus" : checkBoxValues("nodeStatus")
   
  ).trigger("reloadGrid", [ page: 1]);

2、该问题调查如下:

  第一次传值:id传123456,勾选待处理

       postData: id:123456  , nodeStatus : [S0]
       第二次传值:id传1234567,勾选正在处理
       postData:id :1234567 , nodeStatus : [S1]
       第三次传值:勾选待处理、正在处理
       postData:nodeStatus : [S0, S1]
       第四次传值:勾选待处理、已处理
       postData:nodeStatus : [S0, S2]
       第五次传值:勾选待处理、正在处理、已处理
       postData:nodeStatus : [S0, S1, S2]
       第六次传值:勾选正在处理、已处理
       postData:nodeStatus : [S1, S2, S2]
       第七次传值:勾选待处理、已处理
       postData:nodeStatus : [S0, S2, S2]
       第八次传值:勾选已处理
       postData:nodeStatus : [S2, S2, S2]

  不难发现,它会启用上次提交的历史数据,并将本次提交的数据对应替换,如果是单个值还好,如果是数组那么就会出现问题。  

3、解决该问题方式:

  A、在jqGrid内使用serializeGridData 事件,此事件返回一个要传到后台的序列化数据,这里进行重新赋值后返回发到后台:

              serializeGridData : function (postData)
             
                postData.nodeStatus=checkBoxValues("nodeStatus");
                return JSON.stringify(postData);
              ,
   此方法有一个弊端,就是不能一劳永逸,如果后期查询页面又新增了一个复选框查询项,那么记得一定要在此处重新赋值。

  B、简单粗暴的方法,每次请求前都将历史数据清除掉:

    var postData = $("#xxTable").jqGrid("getGridParam", "postData");  

    $.each(postData, function (k, v)   

      delete postData[k];  
    ); 
    此方法可以提炼为一个公共方法使用。

 

以上是关于jqGrid以setGridParam方式postData,包含历史数据的问题的主要内容,如果未能解决你的问题,请参考以下文章

jqgrid postData setGridParam 调用多次时查询条件累加的问题--详情页查询导致的无法在新的页面中查询

JqGrid学习笔记

jqgrid删除之后怎么回到第一页

jqGrid清空表格

JqGrid相关操作备忘 方法列表

jqGrid弹出表格设置分页