2016-03-02 95 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时。 –