2016-03-02 5 views
3

У меня есть открытая веб-служба, которая возвращает данные в JSON или XML. Я создал страницу JSP и добавил в jQgrid. Данные отображаются очень хорошо, однако, когда я пытаюсь отфильтровать результаты с помощью filterToolbar, он терпит неудачу. Firebug говорит: « TypeError: jQuery.jgrid не определено».jQgrid filterToolbar не работает с searchOnEnter

Я читал почти все сообщения в jQuery и jqGrid, и я понятия не имею, почему я получаю эту ошибку. Я запускаю hibernate и Spring MVC из архетипа appfuse./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().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 ([free jqGrid] (https://github.com/free-jqgrid/jqGrid), [Guriddo jqGrid JS] (http://guriddo.net/?page_id=103334) или старый jqGrid в версии <= 4.7), который вы используете? Не могли бы вы изменить URL-адреса для jqGrid на 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 я увидел, что несколько пользовательских интерфейсов разобрались, и он работал лучше на хроме. Но я все еще терплю неудачу на том же месте. Но провал более ясен. теперь он говорит «Uncaught TypeError: невозможно прочитать свойство« getAccessor »неопределенного» (String (jQuery.jgrid.getAccessor (this, 'idcveconfig')). toUpperCase(). substr (0,3) == String ("307") .toUpperCase()) « –

ответ

0

Кричите от @Oleg за то, что я указал в правильном направлении!

Вот полный сценарий для тех, кто может использовать одну и ту же настройку. Я создал webapp, используя Appfuse.org Appfuse Spring MVC и спящий архетип. В этой структуре есть множество дополнительных функций, которые помогают сделать это приложение довольно плавным, но в документации на самом деле не говорится о всех включенных функциях.

Appfuse включает в себя оптимизатор веб-ресурсов, который загружает кучу скриптов, я предполагаю повысить производительность. Этот WRO создает файл сценария под названием «main.js», и этот файл представляет собой комбинацию любых сценариев, загружаемых в WRO.XML. Когда main.js загружается, он перезаписывает ваши локальные/защищенные переменные и создает конфликт с загруженным jquery.

Я удалил jquery из WRO.xml и EUREKA !!!! оно работает! Мои последующие шаги - попытаться переместить мои сценарии jqgrid в WRO.xml и посмотреть, работает ли это тоже.

0

текущая реализация фильтрации использует глобальногоjqGrid. Он не может использовать $j, который вы установили в noConflict(). Я бы рекомендовал вам включить

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

перед тем jquery.jqGrid.min.js и использовать только стиль использования методов jqGrid только в виде $j("#jqGrid").jqGrid("filterToolbar", {searchOnEnter: true}); вместо $j("#jqGrid").filterToolbar({searchOnEnter: true});. Это уменьшает возможные конфликты. Кроме того, вы должны установить глобальную переменную jQuery (например, window.jQuery = $j;).

ОБНОВЛЕНО: Я изучил ваш код более точно, и мне кажется, что у вас не должно быть проблем с использованием filterToolbar. Текущий код по-прежнему установлен глобальныйjQuery переменная, которую необходимо использовать jqGrid. Я попытался использовать очень закрытый код со свободным jqGrid и не имел проблем. Я думаю, что демо, которое вы могли бы подготовить, могло очистить все.

+0

Я тоже это пробовал ... на всякий случай. У меня тот же результат.« Неподготовлено TypeError: невозможно прочитать свойство » getAccessor 'undefined " –

+0

@BobbyKing: [demo] (http: //www.ok-soft-gmbh .com/jqGrid/OK/noConflict-vulns.htm) использует ваш код, и я не вижу проблем. Я использую бесплатный jqGrid 4.13.0 – Oleg

+0

спасибо! Что помогает. Даже после копирования/вставки кода я все равно получаю сообщение об ошибке, которое говорит мне, что в моем webapp есть какой-то конфликт. Я использую архетип Appfuse, который запускает Spring MVC и Hibernate. Я думал, что, обернув все в функции и заменив $ на $ j, это позволит избежать конфликтов, особенно с включенным .noConflict. –