jQuery $ .cookie nie jest funkcją

81

Próbuję ustawić plik cookie za pomocą jQuery:

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

Ale kiedy ładuję moją stronę, pojawia się błąd „$ .cookie nie jest funkcją”. Oto co wiem:

  • Pobrałem tutaj wtyczkę do plików cookie jQuery .
  • Łączę się z jQuery a NASTĘPNIE wtyczką cookie.
  • Zarówno jQuery, jak i jQuery.cookie ładują się poprawnie z 200 OK.

Przyjrzałem się kilku innym odpowiedziom ( między innymi tutaj i tutaj ), na które większość osób sugerowała zmianę nazwy pliku cookie.js. Zmieniłem nazwę mojego pliku cookie na „jquery.cookeee.js”, ale wyniki są takie same.

Jakieś pomysły na temat tego, co się tutaj dzieje?

Jeśli to pomoże, tworzę aplikację internetową w MVC 4.

ElliotSchmelliot
źródło
Jakieś wyjątki w konsoli Twojej przeglądarki? Może twoja wersja jQuery nie jest odpowiednia dla twojej wersji wtyczki plików cookie jQuery
Ian
2
Czy dołączasz jQuery dwa razy? (prawdopodobnie tak). W przeciwnym razie albo używasz $ .noConflict (), albo dołączasz inny plik .js, który zastępuje $.
Kevin B
1
Co daje $ .fn.jquery zarówno bezpośrednio po włączeniu jquery.js, jak i w kodzie, w którym występuje błąd.
Kevin B
1
@ElliotSchmelliot Tak, ponieważ druga całkowicie nadpisze pierwszą, w tym wszystkie wtyczki.
Kevin B
4
Jeśli już znalazłeś odpowiedź, możesz na nie odpowiedzieć samodzielnie. Zapobiega to, że inni pracują nad odpowiedzią, a nawet otwierają pytanie.
surfmuggle

Odpowiedzi:

126

Oto wszystkie możliwe problemy / rozwiązania, z którymi się spotkałem:

1. Pobierz wtyczkę cookie

$.cookienie jest standardową funkcją jQuery i wtyczkę należy pobrać tutaj . Pamiętaj, aby w <script>razie potrzeby dołączyć odpowiedni tag (patrz dalej).

2. Dołącz jQuery przed wtyczką cookie

Włączając skrypt cookie, pamiętaj, aby najpierw dołączyć jQuery, a następnie wtyczkę cookie.

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

3. Nie dołączaj jQuery więcej niż raz

To był mój problem. Upewnij się, że nie dołączasz jQuery więcej niż raz. Jeśli tak, możliwe jest, że:

  1. jQuery ładuje się poprawnie.
  2. Wtyczka cookie ładuje się poprawnie.
  3. Twoje drugie włączenie jQuery nadpisuje pierwsze i niszczy wtyczkę cookie.

Każdy, kto korzysta z projektów ASP.Net MVC, powinien zachować ostrożność w przypadku domyślnych dołączeń pakietu JavaScript. Moje drugie włączenie jQuery miało miejsce na jednej z moich globalnych stron układu pod linią @Scripts.Render("~/bundles/jquery").

4. Zmień nazwę pliku wtyczki, aby nie zawierała pliku „.cookie”

W rzadkich przypadkach zmiana nazwy pliku na taką, która NIE zawiera „.cookie”, rozwiązała ten błąd, prawdopodobnie z powodu problemów z serwerem WWW. Domyślnie pobrany skrypt nosi nazwę „jquery.cookie.js”, ale spróbuj zmienić jego nazwę na taką jak „jquery_cookie.js”, jak pokazano powyżej. Więcej szczegółów na temat tego problemu znajduje się tutaj .

ElliotSchmelliot
źródło
11
Używałem frameworka i problem polegał na wielokrotnym włączaniu jQuery. Wielkie dzięki !!!
jrierab Kwietnia
Na githubie jest napisane, że wtyczka nie jest już obsługiwana, więc zaktualizowałem plik do nowszej wersji (myślę, że 2.1.0) i nie działa, więc musisz użyć starej wersji, do której prowadzi ta odpowiedź.
Erik Grosskurth
2
Dla mnie jQuery zostało dodane więcej niż jeden raz
Ardalan Shahgholi
Dziękujemy za komentarz „w tym jQuery więcej niż raz”. Problem rozwiązano 7 lat później.
Erik Frantz
37

Stara wersja jQuery Cookie została zaniechana, więc jeśli jesteś uzyskiwanie błąd:

$.cookie is not a function

powinieneś uaktualnić do nowej wersji .

Interfejs API nowej wersji jest również inny - zamiast używania

$.cookie("yourCookieName");

powinieneś użyć

Cookies.get("yourCookieName");
YPCrumble
źródło
2
Uaktualniam jquery do wersji 3.3.1.js. Ale to nie działa poprawnie. W tym samym wierszu, który zmieniłem, generowany jest komunikat „Uncaught ReferenceError: Cookies is not defined”. Czy jest ze mną ktoś taki sam?
jong-hyeon-yeo
25

dodaj tę wtyczkę cookie do jquery.

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
taksówki
źródło
Zadziałało tylko wtedy, gdy dodam ci dany skrypt po wp_head()funkcji w moim motywie wordpress.
Rishabh
Potrzebowałem tylko prostego linku do pliku i to dobrze wykonało pracę. Nie potrzebowałem całej tej instalacji npm.
Dave
2

Sprawdź, czy umieściłeś skrypt w nagłówku, a nie w stopce strony. Szczególnie w WordPressie ten nie działał:

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

Ostatni parametr wskazuje dołączenie skryptu do stopki i należy go zmienić na false (domyślnie). Sposób działania:

wp_register_script('cookie', get_template_directory_uri() . '/js/jquery.cookie.js');
Tatyana
źródło
2

Powinieneś najpierw dodać, jquery.cookie.jsa następnie dodać swój js lub jQuery, w którym używasz tej funkcji.

Kiedy przeglądarka ładuje stronę najpierw to wczytuje to, jquery.cookie.jsa potem js lub jQuery i teraz ta funkcja jest dostępna do użycia

Amit Mishra
źródło
0

Ja też miałem ten problem. Dowiedziałem się, że posiadanie funkcji $ (document) .ready, która zawiera $ .cookie w tagu skryptu wewnątrz ciała, podczas gdy plik cookie js ładuje się w nagłówku PONIŻEJ jquery, co spowodowało, że $ (dokument). Był już przetwarzany przed plikiem cookie wtyczka może zakończyć ładowanie.

Przeniosłem skrypt ładowania wtyczki cookie do treści przed skryptem $ (document) .ready i błąd zniknął: D

Kostas Tsakalidis
źródło
0

Rozwiąż jQuery $ .cookie nie jest funkcją tego problemu Aktualizacja jquery cdn w rozwiązaniu tego problemu

 <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
źródło
3
Gdzie piłeś, kiedy to pisałeś? Te słowa wcale nie występują w tej kolejności.
Shayne