2016-03-02 96 views
3

我有一個公開的Web服務,它以JSON或XML格式返回數據。我建立了一個JSP頁面並添加到jQgrid中。數據顯示得很好,但是當我嘗試使用filterToolbar過濾結果時失敗。 Firebug說:「 TypeError:jQuery.jgrid is undefined」。jQgrid filterToolbar失敗,搜索輸入

我讀過幾乎每一篇關於jQuery和jqGrid的文章,我不知道爲什麼我得到這個錯誤。我從一個appfuse原型運行hibernate和Spring MVC。/services/api/vulnss將根據請求的類型返回xml或json。 json和XML都可以很好地填充網格,我可以對所有內容進行排序和翻頁。

<html> 
<head> 


     <link href="/resources/css/ui.jqgrid.css" rel="stylesheet" type="text/css"/> 
     <link href="/resources/css/ui.jqgrid-bootstrap.css" rel="stylesheet" type="text/css"/> 
     <link href="/resources/css/ui.jqgrid-bootstrap-ui.css" rel="stylesheet" type="text/css"/> 





     <script type="text/javascript" src="/resources/js/jquery-1.11.0.min.js"></script> 
     <script type="text/javascript" src="/resources/js/i18n/grid.locale-en.js"></script> 
     <script type="text/javascript" src="/resources/js/jquery.jqGrid.min.js"></script> 

</head> 

和腳本部分:

<script type="text/javascript"> 

變量$ J = jQuery.noConflict(); (函數($ j)的{

  $j().ready(function(){ 
       $j("#jqGrid").jqGrid({ 
         url: '/services/api/vulns', 
         mtype: "GET", 
         //styleUI : 'Bootstrap', 
         datatype: "xml", 
         colModel: [ 
          { label: 'idcveconfig', name: 'idcveconfig', key: true, width: 75 }, 
          { label: 'cveid', name: 'cveid', width: 150 }, 
          { label: 'product', name: 'product', width: 150 }, 
          { label: 'version', name: 'version', width: 150 }, 
          { label:'vendor', name: 'vendor', width: 150 }, 
          { label:'vulnsummary', name: 'vulnsummary', width: 150 } 
          ], 
         viewrecords: true, 
         loadonce: true, 
         height: 250, 
         rowNum: 20, 
         gridview: true, 
         pager: "#jqGridPager", 
         caption: "LOading data from server at once", 
         xmlReader : { 
          root: "List", 
          row: "item", 
          //page: "rows>page", 
          //total: "rows>total", 
          //records : "rows>records", 
          repeatitems: false, 
          //cell: "cell", 
          //id: "[id]", 
          //userdata: "userdata", 

          } 


        }); 
       $j("#jqGrid").filterToolbar({searchOnEnter : true}); 

       }); 
})(jQuery); 

我打開了開發工具與鍍鉻和控制檯我換用jQuery的$ j和它返回FALE。我不完全相信它應該是返回,但串307場 「idcveconfig」 中存在。

enter image description here

+1

你可以把它添加到jsfiddle嗎? –

+0

哪個版本的jqGrid和從哪個分支的jqGrid([免費jqGrid](https://github.com/free-jqgrid/jqGrid),[Guriddo jqGrid JS](http://guriddo.net/?page_id=103334 )或者使用<= 4.7版本的舊版jqGrid)?你能否將jqGrid的URL更改爲URL以釋放jqGrid(參見[wiki](https://github.com/free-jqgrid/jqGrid/wiki/Access-free-jqGrid-from-different-CDNs))並驗證是否這個問題也存在於免費的jqGrid中嗎?如果問題存在,請提供可用於重現問題的演示(帶有非最小化的'jquery.jqgrid.src.js')。 – Oleg

+0

我正在使用Guriddo的最新版本,所以5.2。切換到免費的jqGrid後,我看到一些UI的事情清除了,它在Chrome上運行的更好。但我仍然在同一地點失敗。但失敗有點更清楚。 substr(0,3)==字符串(「307」)「未捕獲的類型錯誤:無法讀取未定義的屬性'getAccessor'(String(jQuery.jgrid.getAccessor(this,'idcveconfig')).toUpperCase ).toUpperCase())「 –

回答

0

大聲呼籲@Oleg讓我指出正確的方向!

以下是可能使用相同設置的完整場景。我使用Appfuse.org Appfuse Spring MVC和hibernate原型創建了一個webapp。這個框架附帶了大量的附加功能,可以幫助這個應用程序運行非常流暢,但文檔並沒有真正討論包含的所有功能。

Appfuse包含一個Web資源優化器,可以加載一堆腳本,我假設要提高性能。該WRO創建一個名爲「main.js」的腳本文件,該文件是將任何腳本加載到WRO.XML中的組合。當main.js被加載時,它會覆蓋你的本地/受保護的變量,並且它與我正在加載的jquery產生衝突。

我從WRO中刪除了jquery。xml和EUREKA !!!!有用!我接下來的步驟是嘗試將我的jqgrid腳本移動到WRO.xml並查看它是否也可以工作。

0

當前實現過濾的使用全球jqGrid。它不能使用您在noConflict()中設置的$j。我建議你到包括

<script type="text/javascript"> 
    $.jgrid = $.jgrid || {}; 
    $.jgrid.no_legacy_api = true; 
</script> 

jquery.jqGrid.min.js之前,只有在形式$j("#jqGrid").jqGrid("filterToolbar", {searchOnEnter: true});而不是$j("#jqGrid").filterToolbar({searchOnEnter: true});只使用的使用方法jqGrid的風格。它減少了可能的衝突。此外,你應該設置全球jQuery變量(如window.jQuery = $j;)。

已更新:我更仔細地檢查了您的代碼,在我看來,您應該沒有使用filterToolbar的問題。您當前的代碼仍然設置爲globaljQuery變量,需要由jqGrid使用。我試圖用免費的jqGrid使用非常接近的代碼,並沒有任何問題。我認爲你可以準備的演示可以清除一切。

+0

我也試過這個......以防萬一。我得到了同樣的結果。」Uncaught TypeError:Can not read property' getAccessor'undefined「 –

+0

@BobbyKing:[演示](http://www.ok-soft-gmbh .com/jqGrid/OK/noConflict-vulns.htm)使用你的代碼,我沒有看到任何問題。我使用免費的jqGrid 4.13.0 – Oleg

+0

謝謝!這有幫助。即使在複製/粘貼代碼後,我仍然得到錯誤,這告訴我在我的web應用程序中存在某種衝突。我正在使用運行Spring MVC和Hibernate的Appfuse原型。我認爲通過將所有內容封裝在一個函數中,並用$ j替換$,它將避免衝突,特別是在打開.noConflict時。 –