jQuery $ .cookie no es una función

81

Estoy tratando de configurar una cookie usando jQuery:

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

Pero cuando cargo mi página, recibo el error "$ .cookie no es una función". Esto es lo que sé:

  • He descargado el complemento de cookies de jQuery aquí .
  • Estoy enlazando a jQuery y LUEGO al complemento de cookies.
  • Tanto jQuery como jQuery.cookie se cargan correctamente con 200 OK.

He visto varias otras respuestas ( aquí y aquí, entre otras), a las que la mayoría de la gente sugirió cambiar el nombre del archivo cookie.js. He cambiado el nombre de mi archivo de cookies "jquery.cookeee.js" pero los resultados son los mismos.

¿Alguna idea de lo que está pasando aquí?

Si ayuda, estoy creando una aplicación web en MVC 4.

ElliotSchmelliot
fuente
¿Alguna excepción en la consola de su navegador? Tal vez su versión de jQuery no sea la adecuada para su versión del complemento de cookies de jQuery
Ian
2
¿Está incluyendo jQuery dos veces? (más probable es que sí). De lo contrario, está utilizando $ .noConflict () o está incluyendo otro archivo .js que anula $.
Kevin B
1
¿Qué le da $ .fn.jquery inmediatamente después de incluir jquery.js y en su código donde ocurre el error?
Kevin B
1
@ElliotSchmelliot Sí, ya que el segundo sobrescribirá completamente al primero, incluidos todos los complementos.
Kevin B
4
Si ya encontró la respuesta, puede responderla usted mismo. Esto evita que otros estén trabajando en una respuesta o incluso abran la pregunta.
surfmuggle

Respuestas:

126

Aquí están todos los posibles problemas / soluciones con los que me he encontrado:

1. Descarga el complemento de cookies

$.cookieno es una función estándar de jQuery y el complemento debe descargarse aquí . Asegúrese de incluir la <script>etiqueta adecuada cuando sea necesario (consulte a continuación).

2. Incluya jQuery antes del complemento de cookies

Al incluir el script de cookies, asegúrese de incluir jQuery FIRST, luego el complemento de cookies.

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

3. No incluya jQuery más de una vez

Este era mi problema. Asegúrese de no incluir jQuery más de una vez. Si es así, es posible que:

  1. jQuery se carga correctamente.
  2. El complemento de cookies se carga correctamente.
  3. Su segunda inclusión de jQuery sobrescribe la primera y destruye el complemento de cookies.

Para cualquiera que use proyectos ASP.Net MVC, tenga cuidado con las inclusiones de paquetes javascript predeterminados. Mi segunda inclusión de jQuery fue dentro de una de mis páginas de diseño global debajo de la línea @Scripts.Render("~/bundles/jquery").

4. Cambie el nombre del archivo del complemento para que no incluya ".cookie"

En algunos casos raros, cambiar el nombre del archivo a algo que NO incluya ".cookie" ha solucionado este error, aparentemente debido a problemas del servidor web. De forma predeterminada, el script descargado se titula "jquery.cookie.js", pero intente cambiarle el nombre a algo como "jquery_cookie.js" como se muestra arriba. Más detalles sobre este problema están aquí .

ElliotSchmelliot
fuente
11
Estaba usando un marco y el problema era la inclusión múltiple de jQuery. Muchas gracias !!!
jrierab
Dice en github que el complemento ya no era compatible, así que actualicé el archivo a la versión más reciente (creo que 2.1.0) y no funcionó, por lo que debe usar la versión anterior a la que se vincula esta respuesta.
Erik Grosskurth
2
Para mí, jQuery se agregó más de una vez
Ardalan Shahgholi
Gracias por el comentario de "incluir jQuery más de una vez". Resolvió un problema 7 años después.
Erik Frantz
36

La versión anterior de jQuery Cookie ha quedado obsoleta, por lo que si recibe el error:

$.cookie is not a function

debe actualizar a la nueva versión .

La API de la nueva versión también es diferente, en lugar de utilizar

$.cookie("yourCookieName");

Deberías usar

Cookies.get("yourCookieName");
YPCrumble
fuente
2
Actualizo mi jquery a 3.3.1.js. Pero no funciona correctamente. 'Error de referencia no detectado: las cookies no están definidas' se genera en la misma línea que cambié. ¿Hay alguien igual conmigo?
jong-hyeon-yeo
25

agregue este complemento de cookies para jquery.

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
taxis
fuente
Funcionó solo cuando agregué un script tras una wp_head()función en mi tema de WordPress.
Rishabh
Todo lo que necesitaba era un simple enlace a un archivo y esto logró el trabajo muy bien. No necesitaba toda esa instalación de npm.
Dave
2

Compruebe que incluyó el script en el encabezado y no en el pie de página de la página. Particularmente en WordPress, este no funcionó:

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

El último parámetro indica que se incluye el script en el pie de página y debe cambiarse a falso (predeterminado). La forma en que funcionó:

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

Primero debe agregar y jquery.cookie.jsluego agregar su js o jQuery donde esté usando esa función.

Cuando el navegador carga la página web primero, carga esto jquery.cookie.jsy luego usted js o jQuery y ahora esa función está disponible para su uso

Amit Mishra
fuente
0

Yo tuve este problema también. Descubrí que tener una función $ (document) .ready que incluía un $ .cookie en una etiqueta de script dentro del cuerpo mientras se cargaba la cookie js en la cabeza ABAJO jquery como se esperaba, resultó en $ (document) .ready siendo procesado antes de la cookie el complemento podría terminar de cargarse.

Moví el script de carga del complemento de cookies en el cuerpo antes del script $ (document) .ready y el error desapareció: D

Kostas Tsakalidis
fuente
0

Resolver jQuery $ .cookie no es una función que este problema jquery cdn actualice en resolver este problema

 <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>
Shivendra Kumar Singh
fuente
3
¿Dónde bebiste cuando escribiste esto? Esas palabras no van en ese orden en absoluto.
Shayne