我最近寫了一個問題「jqGrid display default 「loading」 message when updating a table/on custom update」的答案。在寫回答的時候我想:爲什麼他使用addJSONData()函數刷新網格中的數據,而不是相對於更改URL setGridParam()並刷新jqGrid數據相對於trigger('reloadGrid' )?在開始時,我想推薦使用'reloadGrid',但在想到這個之後,我明白我不太清楚最好的方法是什麼。至少,我不能用兩句話來解釋爲什麼我更喜歡第二種方式。所以我決定這可能是一個有趣的討論主題。應該將jqGrid的用法addJSONData替換爲setGridParam()的用法,並觸發('reloadGrid')?
所以確切的說:我們有一個典型的情況。我們有一個網頁,至少有一個jqGrid和一些其他控件,如組合框(選擇),複選框等,它們可以讓用戶更改顯示在jqGrid中的信息的範圍。通常我們定義一些事件處理程序,如jQuery("#selector").change(myRefresh).keyup(myKeyRefresh)
,我們需要根據用戶的選擇重新加載jqGrid容器。
從另外的用戶輸入閱讀和分析的信息後,我們可以刷新jqGrid的容器中,至少有兩種方式:
- 的
$.ajax()
人工撥打電話,然後$.ajax
呼叫jQuery.parseJSON()
的成功或完全手柄內側(或eval
)然後調用addJSONData函數jqGrid。我在stackoverflow.com上發現了很多使用addJSONData的例子。 - 更新URL的jqGrid的根據用戶的輸入,復位電流頁面數爲1,選擇更改網格的標題。所有這些都可以根據setGridParam()和可選的setCaption() jqGrid方法完成。最後調用網格的觸發器('reloadGrid')函數。按照我主要使用jQuery.param函數來確定的方式來構建網址url,我已經將所有url參數正確包裝在encodeURIComponent中。
我希望我們討論這兩種方式的優缺點。我目前使用第二種方式,所以我將從這個優勢開始。
可以這樣說:我打電話給現有的Web服務,將接收到的數據轉換成jqGrid格式並且調用addJSONData。這就是我使用addJSONData方法的原因!
好的,我會選擇另一種方式。 jqGrid可以直接在Web服務上調用並在網格中填充結果。有很多jqGrid選項可以讓你自定義這個過程。
首先,可以刪除或重命名發送到服務器相對於任何標準參數到prmNames的jqGrid的選項或相對於所述POSTDATA選項(參見http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options)添加任何多個附加參數。可以在jqGrid通過定義serializeGridData()函數(jqGrid的另一個選項)發出相應的$.ajax
請求之前立即修改所有構建的參數。除此之外,通過設置jqGrid的ajaxGridOptions選項,可以更改每個$.ajax
參數。例如,我使用ajaxGridOptions: {contentType: "application/json"}
作爲$.jgrid.defaults
的一般設置。 ajaxGridOptions選項非常強大。相對於所述ajaxGridOptions選項一個可以重新定義$.ajax
請求通過發送的jqGrid的任何參數,如誤差,完整和beforeSend事件。我認爲定義dataFilter事件可能會對從服務器返回的行數據進行任何修改。
使用觸發器('reloadGrid')的另一個參數是在AJAX請求處理期間阻塞jqGrid。大多數情況下,我使用參數loadui: 'block'
在JSON請求發送到服務器期間阻止jqGrid。就jQuery blockUI插件http://malsup.com/jquery/block/而言,可以將網頁的更多部分作爲網格屏蔽。調用觸發( 'reloadGrid')方法和的jQuery( '#主')之前
jQuery('#main').block({ message: '<h1>Die Daten werden vom Server geladen...</h1>' });
解鎖()的loadComplete和loadError函數中:要做到這一點可調用。 。在這種情況下,可以將選項設置爲「禁用」。
,我的最後一句話:主要是我用來與數據類型創建的jqGrid設置爲「當地」而不是「JSON」,我會打電話的觸發(「變化」)的一些控制功能(其中一個組合框)如: jQuery("#selector").change(myRefresh).keyup(myKeyRefresh).trigger('change')
。 因此我構造的jqGrid的URL參數只在一個地方的變化把手的內部,改變數據類型爲「JSON」上述setGridParam()內部。
所以我不明白爲什麼函數addJSONData()應該永遠使用。
是否有人使用addJSONData()函數向我解釋了它的用法的好處?
爲了公平起見,我可以添加addJSONData(),它存在於舊版本的jqGrid中,因爲它具有我在此描述的大多數功能。是否應該用addJSONData jqGrid的用法替換爲的用法setGridParam()和trigger('reloadGrid')?
@ user43244:就像我在我的問題中描述的那樣,addJSONData不是從服務器獲取JSON數據的唯一方法。您可以定義jqGrid的'datatype:「json」'參數,如果jqGrid需要數據(如果頁面切換,更改排序順序和第一次填充原因),它將爲您發送請求給服務器。有時(取決於服務器軟件),您需要使用'ajaxGridOptions'來設置額外的ajax參數。你所做的是在http://stackoverflow.com/questions/2928371/how-to-filter-the-jqgrid-data-not-using-the-built-in-search-filter-box/2928819#2928819中討論。 – Oleg 2010-09-15 20:58:01
即使我們有這樣的要求。請參閱http://stackoverflow.com/questions/7587255/using-jggrid-with-apiproviding-local-data-for-search-paging,讓我們知道如何避免使用'addJSONData' – CodeRain 2011-09-29 09:58:45