2011-02-02 148 views
4

我有升級後的問題:什麼原因導致「jqGrid不是函數」錯誤?

  • 的jqGrid從1.3.2到3.5.3 3.8.2
  • 了jQuery 1.4.4
  • jQuery的UI從1.7.2到1.8.8

我的應用程序有jqueryui選項卡。第三個選項卡有一個jqGrid控件。 如果我在第三個選項卡上進行重新加載,那麼網格工作正常。但是,如果在第一個選項卡上執行重新加載,然後單擊第三個選項卡,則不會顯示網格。

Firebug向我展示「jqGrid不是函數」錯誤。

在論壇搜索建議的問題是grid.loader.js不正確的pathtojsfiles

我document.URL前綴礦是這樣的:

function jqGridInclude() 
{ 
    var pathtojsfiles = document.URL + "script/jqGrid/src/"; // need to be ajusted 
    ... 
} 

如果設置pathtojsfiles到錯誤的值您在Firebug中看到'文件未找到'錯誤。這一切加載罰款。

http://forum.jquery.com/topic/jqgrid-is-not-a-function

這個討論有一個死衚衕: @milenaa:「我認爲這是在第一個路徑問題,因爲我已經收到了,但它的工作原理是這樣的:我有一個菜單,調用一些返回一些數據的服務器端控制器或者我發送一些數據 當我點擊調用控制器的鏈接後調用jqgrid函數,但是,如果首先調用其他函數,jqgrid doesn這個頁面包含了這兩種情況下需要的所有js 它就像其他函數不會讓jqgrid工作......但是我不知道爲什麼......「

讀這讓我想我有一個類似的問題。 我不得不承認,我不熟悉Javascript的執行模型。 關於如何解決或調試的任何想法?

回答

3

我想你在Internet Explorer中有描述的問題。看看the following old answer。問題在於grid.loader.js中當前使用的方法不能保證包含的文件將按照與包含的順序完全相同的順序執行,而且全部在jQuery(document).ready處理程序開始執行之前執行。它的所有加載文件已經在網頁瀏覽器緩存中(就像你描述的「重新加載」頁面一樣),那麼所有的工作都是正確的,如果不是你使用的代碼jqGrid可以執行之前 jqGrid JavaScript準備就緒。

我推薦你根本不包括 grid.loader.js。除此之外,您可以按照您在grid.loader.js中看到的相同順序手動包含您可能需要從grid.loader.js獲取的所有文件。另一種方法可以嘗試使用我在my answer in trirand forum中描述的解決方法。我所知道的解決方法的唯一限制是:您不能使用一開始就具有XML標頭的XHTML代碼。

+0

我改變我的代碼,因爲你建議我們不要包含grid.loader.js文件。現在我沒事,沒有錯誤。感謝@Oleg。 – 2012-06-04 05:31:10

相關問題