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];  
    }); 
    此方法可以提煉為一個公共方法使用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM