jQuery $.cookie не является функцией

Я пытаюсь установить cookie с помощью jQuery:

$.cookie("testCookie", "hello");
alert($.cookie("testCookie"));

Но когда я загружаю свою страницу, я получаю сообщение об ошибке "$.cookie - это не функция". Вот что я знаю:

  • Я скачал плагин cookie jQuery здесь.
  • Я ссылаюсь на jQuery, а затем на плагин cookie.
  • JQuery и jQuery.cookie загружаются корректно с 200 OK.

Я рассмотрел несколько других ответов ( здесь и здесь, среди прочих), на которые большинство людей предлагало переименовать файл cookie.js. Я переименовал мой файл cookie в "jquery.cookeee.js", но результаты те же.

Есть идеи о том, что здесь происходит?

Если это поможет, я создаю веб-приложение в MVC 4.

7 ответов

Решение

Если кто-то наткнется на $.cookie is not a function проблема, вот все возможные проблемы / решения, с которыми я столкнулся:

  • Плагин cookie не был загружен. $.cookie не является стандартной функцией jQuery, и плагин должен быть загружен здесь. Не забудьте включить соответствующие <script> пометьте, где это необходимо (см. далее).
  • При включении скрипта cookie, обязательно включите jQuery FIRST, а затем плагин cookie.

то есть ваша голова может содержать:

<script src="~/Scripts/jquery-2.0.3.js" type="text/javascript"></script>

а потом

<script src="~/Scripts/jquery_cookie.js" type="text/javascript"></script>
  • В некоторых случаях переименование файла во что-либо, не включающее ".cookie", исправило эту ошибку, по-видимому, из-за проблем веб-сервера. По умолчанию загруженный скрипт называется "jquery.cookie.js", но попробуйте переименовать его в что-то вроде "jquery_cookie.js", как показано выше. Подробнее об этой проблеме здесь.
  • Наконец (это была моя проблема), убедитесь, что вы не включаете jQuery более одного раза. Если да, возможно, что 1. jQuery загружается правильно 2. Плагин cookie загружается правильно 3. Наконец, ваше второе включение jQuery перезаписывает первое и уничтожает плагин cookie.

Для тех, кто использует проекты ASP.Net MVC, будьте осторожны с включениями по умолчанию в комплект javascript; их иногда бывает трудно найти. Мое второе включение jQuery было в одной из моих глобальных страниц макета под линией @Scripts.Render("~/bundles/jquery"), Лично я предпочитаю не рендерить пакеты, а просто ссылаться на javascript по мере необходимости.

Приветствия и особая благодарность Kevin B. за помощь в этом.

Старая версия jQuery Cookie устарела, поэтому, если вы получаете сообщение об ошибке:

$.cookie is not a function

вам следует перейти на новую версию.

API для новой версии также отличается - вместо использования

$.cookie("yourCookieName");

ты должен использовать

Cookies.get("yourCookieName");

Добавьте этот плагин cookie для jquery.

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>

Убедитесь, что вы включили скрипт в верхний колонтитул, а не в нижний колонтитул страницы. В частности, в WordPress этот не работал:

wp_register_script('cookie', get_template_directory_uri() . '/js/jquery.cookie.js', array(), false, true);

Последний параметр указывает на включение скрипта в нижний колонтитул и должен быть изменен на false (по умолчанию). Как это работает:

wp_register_script('cookie', get_template_directory_uri() . '/js/jquery.cookie.js');

Вы должны добавить сначала jquery.cookie.js затем добавьте свой js или jQuery там, где вы используете эту функцию.

Когда браузер сначала загружает веб-страницу, он загружает эту jquery.cookie.js и после этого вы JS или JQuery, и теперь эта функция доступна для использования

Решить jQuery $.cookie не является функцией этой проблемы Обновление jquery cdn в решении этой проблемы

 <script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
 <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js" integrity="sha256-T0Vest3yCU7pafRw9r+settMBX6JkKN06dqBnpQ8d30=" crossorigin="anonymous"></script>

У меня тоже была эта проблема. Я обнаружил, что наличие функции $(document).ready, которая включает в себя тег $.cookie в теге script внутри тела, в то время как cookie js загружается в заголовок НИЖЕ jquery, как и предполагалось, приводит к обработке $(document).ready перед cookie. Плагин может закончить загрузку.

Я переместил скрипт загрузки подключаемого модуля cookie в тело раньше, чем скрипт $(document).ready, и ошибка исчезла:D

Другие вопросы по тегам