jQuery $ .cookie ist keine Funktion

81

Ich versuche, mit jQuery ein Cookie zu setzen:

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

Aber wenn ich meine Seite lade, erhalte ich die Fehlermeldung "$ .cookie ist keine Funktion". Folgendes weiß ich:

  • Ich habe das jQuery-Cookie-Plugin hier heruntergeladen .
  • Ich verlinke zu jQuery und dann zum Cookie-Plugin.
  • Sowohl jQuery als auch jQuery.cookie werden mit 200 OKs korrekt geladen.

Ich habe mir einige andere Antworten angesehen ( hier und hier unter anderem), auf die die meisten Leute vorgeschlagen haben, die Datei cookie.js umzubenennen. Ich habe meine Cookie-Datei in "jquery.cookeee.js" umbenannt, aber die Ergebnisse sind dieselben.

Irgendwelche Ideen, was hier los ist?

Wenn es hilft, erstelle ich eine Webanwendung in MVC 4.

ElliotSchmelliot
quelle
Gibt es Ausnahmen in der Konsole Ihres Browsers? Vielleicht ist Ihre Version von jQuery nicht für Ihre Version von jQuery Cookie Plugin geeignet
Ian
2
Schließen Sie jQuery zweimal ein? (sehr wahrscheinlich ja). Andernfalls verwenden Sie entweder $ .noConflict () oder Sie fügen eine andere .js-Datei hinzu, die $ überschreibt.
Kevin B
1
Was gibt Ihnen $ .fn.jquery sowohl unmittelbar nach dem Einfügen von jquery.js als auch in Ihren Code, in dem der Fehler auftritt?
Kevin B
1
@ElliotSchmelliot Ja, da der zweite den ersten vollständig überschreibt, einschließlich aller Plugins.
Kevin B
4
Wenn Sie die Antwort bereits gefunden haben, können Sie sie selbst beantworten. Dies verhindert, dass andere an einer Antwort arbeiten oder die Frage sogar öffnen.
Surfmuggle

Antworten:

126

Hier sind alle möglichen Probleme / Lösungen, auf die ich gestoßen bin:

1. Laden Sie das Cookie-Plugin herunter

$.cookieist keine Standard-jQuery-Funktion und das Plugin muss hier heruntergeladen werden . Stellen Sie sicher, dass Sie <script>bei Bedarf das entsprechende Tag einfügen (siehe weiter).

2. Fügen Sie jQuery vor dem Cookie-Plugin ein

Stellen Sie beim Einfügen des Cookie-Skripts sicher, dass Sie jQuery FIRST und dann das Cookie-Plugin einschließen.

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

3. Fügen Sie jQuery nicht mehr als einmal ein

Das war mein Problem. Stellen Sie sicher, dass Sie jQuery nicht mehr als einmal einschließen. Wenn Sie sind, ist es möglich, dass:

  1. jQuery wird korrekt geladen.
  2. Das Cookie-Plugin wird korrekt geladen.
  3. Ihre zweite Aufnahme von jQuery überschreibt die erste und zerstört das Cookie-Plugin.

Seien Sie bei allen Benutzern von ASP.Net MVC-Projekten vorsichtig mit den Standardeinschlüssen für Javascript-Bundles. Meine zweite Aufnahme von jQuery erfolgte auf einer meiner globalen Layoutseiten unter der Zeile @Scripts.Render("~/bundles/jquery").

4. Benennen Sie die Plugin-Datei so um, dass sie nicht ".cookie" enthält.

In einigen seltenen Fällen hat das Umbenennen der Datei in etwas, das NICHT ".cookie" enthält, diesen Fehler behoben, anscheinend aufgrund von Webserverproblemen. Standardmäßig trägt das heruntergeladene Skript den Titel "jquery.cookie.js". Versuchen Sie jedoch, es wie oben gezeigt in "jquery_cookie.js" umzubenennen. Weitere Details zu diesem Problem finden Sie hier .

ElliotSchmelliot
quelle
11
Ich habe ein Framework verwendet und das Problem war die mehrfache Einbeziehung von jQuery. Danke vielmals !!!
Jrierab
Auf github heißt es, dass das Plug-in nicht mehr unterstützt wurde, daher habe ich die Datei auf die neuere Version (2.1.0, glaube ich) aktualisiert und es hat nicht funktioniert, sodass Sie die alte Version verwenden müssen, auf die diese Antwort verweist.
Erik Grosskurth
2
Für mich wurde jQuery mehr als einmal hinzugefügt
Ardalan Shahgholi
Vielen Dank für den Kommentar "jQuery mehr als einmal einschließen". Es löste ein Problem 7 Jahre später.
Erik Frantz
36

Die alte Version von jQuery Cookie ist veraltet. Wenn Sie also den Fehler erhalten:

$.cookie is not a function

Sie sollten auf die neue Version aktualisieren .

Die API für die neue Version unterscheidet sich ebenfalls - anstatt sie zu verwenden

$.cookie("yourCookieName");

du solltest benutzen

Cookies.get("yourCookieName");
YPCrumble
quelle
2
Ich aktualisiere meine jquery auf 3.3.1.js. Aber es funktioniert nicht richtig. "Nicht erfasster Referenzfehler: Cookies sind nicht definiert" wird in derselben Zeile generiert, die ich geändert habe. Ist jemand mit mir gleich?
Jong-Hyeon-Yeo
25

füge dieses Cookie-Plugin für jquery hinzu.

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
Taxis
quelle
Es hat nur funktioniert, wenn ich Ihnen ein Skript nach der wp_head()Funktion in meinem WordPress-Theme hinzufüge .
Rishabh
Alles was ich brauchte war ein einfacher Link zu einer Datei und dies erledigte den Job gut. Ich brauchte nicht die ganze npm-Installation.
Dave
2

Stellen Sie sicher, dass Sie das Skript in die Kopfzeile und nicht in die Fußzeile der Seite aufgenommen haben. Besonders in WordPress hat dies nicht funktioniert:

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

Der letzte Parameter gibt an, dass das Skript in die Fußzeile aufgenommen wurde und in false geändert werden musste (Standard). So hat es funktioniert:

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

Sie sollten zuerst hinzufügen und jquery.cookie.jsdann Ihr js oder jQuery hinzufügen, wo Sie diese Funktion verwenden.

Wenn der Browser zuerst die Webseite lädt, lädt er diese jquery.cookie.jsund danach js oder jQuery und jetzt steht diese Funktion zur Verfügung

Amit Mishra
quelle
0

Ich hatte auch dieses Problem. Ich fand heraus, dass eine $ (document) .ready-Funktion, die ein $ .cookie in einem Skript-Tag im Body enthielt, während Cookies js wie beabsichtigt in den Kopf UNTER der jquery geladen wurden, dazu führte, dass $ (document) .ready vor dem Cookie verarbeitet wurde Das Plugin konnte den Ladevorgang beenden.

Ich habe das Ladeskript für das Cookie-Plugin in den Text vor dem Skript $ (document) .ready verschoben und der Fehler ist verschwunden: D.

Kostas Tsakalidis
quelle
0

Löse jQuery $ .cookie ist keine Funktion dieses Problems. Jquery cdn update in löst dieses Problem

 <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
quelle
3
Wo hast du getrunken, als du das geschrieben hast? Diese Worte gehen überhaupt nicht in diese Reihenfolge.
Shayne