Что вызывает ошибку «jqGrid не является функцией»? - PullRequest
4 голосов
/ 03 февраля 2011

У меня проблемы после обновления:

  • jqGrid с 3.5.3 до 3.8.2
  • jquery с 1.3.2 до 1.4.4
  • jquery-Пользовательский интерфейс от 1.7.2 до 1.8.8

В моем приложении есть вкладки jqueryui.Третья вкладка имеет элемент управления jqGrid.Если я перезагружаюсь, находясь на третьей вкладке, то сетка работает правильно.Однако, если выполнить перезагрузку на первой вкладке и затем щелкнуть третью вкладку, то сетка не отображается.

Firebug показывает мне ошибку «jqGrid не является функцией».

Поиск вфорумы предполагают, что проблема заключается в неправильном pathtojsfiles в grid.loader.js

Мой префикс с 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 не работает. И на странице содержатся все js, необходимые для обоих случаев. Как и другая функция, она не позволяет jqgrid работать ... Но я не знаю почему ..."

Чтение этого заставляет меня думать, что у меня похожая проблема.Я должен признать, что я не знаком с моделью исполнения Javascript.Любые идеи о том, как решить или отладить это?

1 Ответ

3 голосов
/ 03 февраля 2011

Полагаю, у вас есть описанная проблема в Internet Explorer.Посмотрите на следующий старый ответ .Проблема заключается в том, что метод, используемый в настоящее время в grid.loader.js, не гарантирует, что включенные файлы будут выполнены в том же порядке, в котором они включены, и более того, все они выполняются перед обработчиком jQuery(document).readyначать выполнять.Если все загруженные файлы уже находятся в кэше веб-браузера (точно так же, как вы описали с помощью «перезагрузки» страницы), тогда все работает правильно, если не ваш код, используемый jqGrid, можно выполнить до JavaScript jqGrid готов.

Я рекомендую вообще не включать grid.loader.js.Вместо этого вы можете вручную включить все файлы, которые вам могут понадобиться из grid.loader.js, в том же порядке, который вы можете увидеть в grid.loader.js .Другой способ - попытаться использовать обходной путь, который я описал в моем ответе на форуме trirand .Единственное ограничение, которое я знаю об обходном пути: вы не можете использовать код XHTML с заголовком XML в начале.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...