2013-01-10 58 views
1

這是我之前發佈的here問題的後續。由於Oleg的回答,我現在可以正確顯示網格了。但是,現在我需要在引導菜單項單擊時用不同的URL刷新jqgrid中的數據。以下是我的代碼:刷新菜單項上的jqgrid點擊,從不同的URL獲取數據

$("#menuitem").click(function(e){ 
$("#grid").jqGrid('setGridParam', {url: '/getdata?id=1234&name=val.text'}); 
    $('#grid').trigger("reloadGrid"); 
}); 

菜單選項是在我們從ajax請求獲取數據後動態添加的。網格似乎在刷新重新加載時重新加載。但是,它似乎從舊URL('/ getdata')獲取數據,而不是具有不同參數集的新數據。我也嘗試過提到的解決方案here,但它沒有在我的情況下工作,因爲我已經動態添加菜單項。

任何幫助,非常感謝。

編輯:我看着螢火蟲上的頁面請求。點擊菜單項時,我看不到請求。我還添加了

$("#list").jqGrid('GridUnload'); 

到點擊處理函數,如this問題的答案中提到的那樣。它爲我清除了網格,但沒有重新加載。所以我在那裏添加了jqgrid的代碼,然後它工作,jqgrid顯示新的數據。所以我的代碼與變化看起來像這樣:

$("#menuitem").click(function(e){ 
    $("#list").jqGrid('GridUnload'); 
    $("#grid").jqGrid({ 
     url: '/getdata?id=1234&name=val.text'', 
     datatype: "json", 
     colNames: ['data'], 
     colModel: [ 
      {name: 'data', align: 'center'} 
     ], 
     jsonReader: { 
      root: "logs", 
      cell: "", 
      id: function() { 
      return function() { 
       return $.jgrid.randId(); 
      } 
      }, 
     page: function() { return 1; }, 
     total: function() { return 1; }, 
     records: function(obj) { return obj.logs.length; } 
    }, 
    loadonce: true, 
    viewrecords: true, 
    autowidth: true, 
    ignoreCase: true, 
    height: "auto", 
    rowNum: 999, 
    autoencode: true, 
    beforeProcessing: function (data) { 
     var items = data.data.data.split("\n"), i, l, item; 
     data.logs = []; 
     for (i = 0, l = items.length; i < l; i++) { 
      item = $.trim(items[i]); 
      if (item.length > 0) { 
       data.logs.push([item]); 
      } 
    } 
} 
}).jqGrid('filterToolbar', {stringResult: true, searchOnEnter: false, defaultSearch: "cn"}); 

});

有沒有更好的方法來做到這一點。它看起來過於繁瑣而沉重。有沒有辦法讓重載網格工作?我想這是內部發生的,但是當你使用插件時,代碼似乎太多了。

感謝,

阿莎

回答

1

所有你需要修復語法錯誤在你的代碼(如果不是隻在問題的文字存在誤差)的第一:

url: '/getdata?id=1234&name=val.text'', 

必須更換

url: '/getdata?id=1234&name=val.text', 

的你存在的主要問題,因爲你使用loadonce: true這是非常實用的,如果你不想或不能在服務器端實現數據的分頁和過濾,並且你希望那個jqGrid爲你做這些。您應該瞭解,在使用loadonce: true的情況下,jqGrid將原始datatype"json"更改爲"local"。只是因爲發生了變化,所有下一次刷新網格內容的請求(分頁,過濾,排序...)將在本地執行,而不會向服務器發送任何請求。如果您需要重新加載網格,則需要在重新加載網格之前將datatype的值重置爲"json"。的GridUnload用法是不是在需要的情況下:

$("#grid").jqGrid('setGridParam', { 
    url: '/getdata?id=1234&name=val.text', 
    datatype: "json" 
}).trigger("reloadGrid"); 

順便說一句,你需要設置url參數只有當你需要變化它。如果您只想重新載入與之前相同的URL,則需要重置datatype: "json"

+0

謝謝@Oleg,工作就像一個魅力。我現在明白了爲什麼它沒有提前解釋你的解釋。我將在下週左右在服務器端爲此jqgrid執行分頁。所以這個解釋有幫助。該網址確實爲請求發生了變化。 URL語法問題僅在問題的文本中,我在複製時插入該問題的文本。再次感謝。 – Alice

1

試試這個

變化

loadonce: true, 

loadonce: false, 

我覺得loadonce是問題