2010-04-30 44 views
4

我有一個頁面上有幾個jqGrid,以及其他一些字段。我想自己做一個AJAX調用,它會返回一個包含應該用來填充整個頁面的數據的JSON對象。如何從最初加載數據中抑制jqgrid?

因此,我想自己打電話,填充「其他字段」,然後從返回的主JSON對象中拉出幾個集合,然後用「手動」填充這些集合的每個jqGrid。

我有這麼多的工作,但我不能讓jqGrid停止試圖自己做一個AJAX請求。不應該有辦法告訴jqGrid在初始化時不要嘗試AJAX調用嗎?

我發現這裏類似的問題問:How to suppress jqgrid from initially loading data?

但我沒有那麼解決它的海報的選項。

我覺得有些人可能想要使用這個插件,而不需要在初始化時嘗試獲取自己的數據。我在文檔(維基 - 選項)中的某處丟失了一個選項嗎?

謝謝。

回答

8

有一種簡單的方法可以說jqGrid不會加載數據本身。您應該使用datatype: 'local'作爲jqGrid選項。此選項表示您計劃使用addRowDataaddJSONData(請參閱jqGrid tableToGrid "options" parameter上的示例)功能自己填充網格數據。您還可以在loadComplete回調中填寫網格中的數據,因爲jqGrid在datatype: 'local'的情況下也調用此函數。

不要忘了,您提供的參數爲addJSONData的數據將使用jsonReaderjsonmap來讀取(解析)。它給你提供了一個很好的方式,不需要太多的操作從服務器接收到的數據。而不是隻給予jqGrid的jsonmap正確的數據映射。數據映射的一個相對複雜的例子可以在Mapping JSON data in JQGrid找到。

如果您考慮優化數據傳輸,請參閱http://trirand.com/blog/jqgrid/jqgrid.html演示頁面上的「數據映射」\「數據優化」部分。這個想法是將表示行的表的數據結構替換爲字符串數組。然後沒有列名稱(結構的提交名稱)將從服務器發送到客戶端,從而壓縮數據傳輸。通過這種優化,您可以像其他方式一樣節省更多時間。不要忘記打開Web服務器上的數據壓縮。這也可以大大減少數據傳輸的大小。

最後我可以推薦通過我討論的問題Should one replace the usage addJSONData of jqGrid to the usage of setGridParam(), and trigger('reloadGrid')?看,我比較addJSONData()函數觸發(「reloadGrid」)的用法用量。因爲如果你想一次更新多個表格觸發器('reloadGrid')會稍微慢一點,就好像你只打一個ajax調用一樣,但是你的程序結構會更容易觸發'reloadGrid')。如果比較兩種情況下的總時間,可能數據傳輸不是您擁有的瓶頸。因此,這兩種情況下的頁面加載總時間幾乎可以保持不變。最好的辦法是在這兩種情況下弄糟時間,並決定你準備爲簡單的程序設計付多少錢。

+0

感謝您的建議。'本地'數據類型工作得很好。我接下來要看看jsonReader和jsonmap。我很欣賞這個鏈接。 – Steve 2010-05-01 10:59:30

+0

可愛的小費 - 謝謝。 – 2010-07-15 13:06:04