今天做項目的時候發現一個問題,我們有一個篩選項,一個是VIP用戶,一個是普通用戶,還有一個是全部用戶,首先看下我們的selection
<select name="" id="user_type"> <option value="">全部</option> <option value="1">VIP</option> <option value="2">普通</option> </select>
非常常用的一種格式,然后我們會做一個判斷
1 var jqgrid_post_data = {};//最終向jqgrid傳輸的json數據 2 if($("#user_type").val()){ //如果有值的話,給json復制 3 jqgrid_post_data["user_type"] = $("#user_type").val(); 4 } 5 jQuery("#table_list_1").jqGrid("clearGridData"); 6 $("#table_list_1").jqGrid('setGridParam', { //重新請求參數 7 postData:jqgrid_post_data , 8 page:this_page, 9 }).trigger("reloadGrid");
但是這個我們發現了一個問題,就是在我們從vip和普通用戶切換到全部數據之后,查詢的還是上次的數據。
比如說我查了一次VIP的用戶數據,然后我切換到了全部用戶,這個時候jqgrid還是查詢的VIP的用戶,但是我們打印 jqgrid_post_data 的時候,這個里面是沒有user_type屬性的。經過查找,發現了是jqgrid緩存了參數。結果辦法分為兩種,一種是比較簡單的,當我們選擇全部用戶的時候,把user_type設置為空
1 jqgrid_post_data["user_type"] = '';
第二種方法是看其他的博客了解到的,就是在reloadGrid之前,執行下面的函數,
1 var postData = $('#jqGrid').jqGrid("getGridParam", "postData"); 2 $.each(postData, function (k, v) { 3 delete postData[k]; 4 });
就是把原來的參數清理掉,然后在重新加載一遍數據。
這兩種辦法,本人都是親測過的,都是好用的。個人覺得,第二種比較通用,大家可以把第二種方法封裝成函數,然后在jqgrid獲取數據的時候,先調用這個函數。清理掉原來的數據,這樣比較通用,比較簡單。