2013-08-02 22 views
49

Próbuję ustawić cookie przy użyciu jQuery:

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

Ale kiedy załadować moją stronę, mam komunikat o błędzie „$ .cookie nie jest funkcją”. Oto, co wiem:

  • Pobrałem wtyczkę cookie jQuery here.
  • Łączę się z jQuery, a następnie z wtyczką cookie.
  • Zarówno jQuery, jak i jQuery.cookie ładują się prawidłowo za pomocą 200 OK.

Szukałem w kilku innych odpowiedzi (here i here między innymi), do którego większość ludzi zaproponował zmianę nazwy pliku cookie.js. Zmieniłem nazwę mojego pliku cookie "jquery.cookeee.js", ale wyniki są takie same.

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

Jeśli to nie pomaga, jestem tworzenia aplikacji internetowych w MVC 4.

+0

żadnych wyjątków w konsoli przeglądarki? Może twoja wersja jQuery nie pasuje do twojej wersji wtyczki cookie jQuery? – Ian

+2

Czy dwa razy dodajesz jQuery? (prawdopodobnie tak). W przeciwnym razie używasz $ .noConflict() lub dodajesz inny plik .js, który przesłania $. –

+0

Po prostu "$ .cookie nie jest funkcją". Nic więcej. – ElliotSchmelliot

Odpowiedz

92

czy ktoś natrafia na problem $.cookie is not a function, tutaj są wszystkie możliwe problemy/rozwiązań mam natknąć:

  • Wtyczka cookie nie została pobrana. $.cookie nie jest standardową funkcją jQuery, a wtyczka musi zostać pobrana here. Upewnij się, że w razie potrzeby umieść odpowiednią etykietę <script> (patrz dalej).
  • Dołączając skrypt cookie, pamiętaj o dołączeniu jQuery FIRST, a następnie wtyczki cookie.

czyli głowa może zawierać:

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

a następnie

<script src="~/Scripts/jquery_cookie.js" type="text/javascript"></script> 
  • w niektórych przypadkach, zmiana nazwy pliku na coś, co nie obejmuje ".cookie" ustaliła to błąd, najwyraźniej z powodu problemów z serwerem sieciowym. Domyślnie pobrany skrypt nosi nazwę "jquery.cookie.js", ale spróbuj zmienić jego nazwę na "jquery_cookie.js", jak pokazano powyżej. Więcej szczegółów na temat tego problemu to here.
  • Wreszcie (to był mój problem), upewnij się, że nie włączasz jQuery więcej niż raz. Jeśli tak, to możliwe, że 1. jQuery ładuje się prawidłowo 2. Wtyczka cookie ładuje się prawidłowo 3. W końcu twoje drugie włączenie jQuery nadpisuje pierwszy i niszczy wtyczkę cookie.

Dla każdego, kto korzysta z projektów ASP.Net MVC, należy zachować ostrożność przy domyślnych załączeniach pakietu javascript; czasami mogą być trudne do znalezienia. Moje drugie włączenie jQuery mieściło się na jednej z moich stron układu globalnego pod linią @Scripts.Render("~/bundles/jquery"). Osobiście wolę nie renderować pakietów i po prostu łączyć je z javascript w razie potrzeby.

Pozdrowienia i specjalne podziękowania dla Kevin B za pomoc w tej sprawie.

+10

Używałem frameworka, a problem polegał na wielokrotnym włączaniu jQuery. Wielkie dzięki !!! – jrierab

+0

Na githubie napisano, że wtyczka nie była już obsługiwana, więc zaktualizowałem plik do nowszej wersji (2.1.0) i nie zadziałał, więc musisz użyć starej wersji, do której prowadzi ta odpowiedź. –

+1

Dla mnie jQuery został dodany więcej niż raz –

1

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

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

Ostatni parametr wskazuje w tym skrypt w stopce i musiał zostać zmieniony na false (domyślnie). Sposób działania:

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

dodaj tę wtyczkę do ciasteczek dla jquery.

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

Działał tylko wtedy, gdy dodaję ci dany skrypt po funkcji 'wp_head()' w moim skrypcie wordpress. – Rishabh

13

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

$.cookie is not a function 

należy uaktualnić do new version.

API dla nowej wersji jest również inna - zamiast używać

$.cookie("yourCookieName"); 

należy użyć

Cookies.get("yourCookieName"); 
+0

Aktualizuję jquery do wersji 3.3.1.js. Ale to nie działa poprawnie. "Uncaught ReferenceError: Pliki cookie nie są zdefiniowane" jest generowany w tej samej linii, którą zmieniłem. Czy jest ktoś taki sam ze mną? –

2

Należy dodać pierwszy jquery.cookie.js następnie dodać JS lub jQuery gdzie używasz że funkcjonować.

Gdy przeglądarka ładuje stronę najpierw ładuje i po tej jquery.cookie.js wtedy JS lub jQuery i teraz, że funkcja jest dostępna do użytku

0

miałem tego problemu, jak również. Dowiedziałem się, że posiadanie funkcji $ (document) .ready, która zawierała $ .cookie w tagu skryptu wewnątrz ciała, podczas gdy ładowanie pliku cookie js w głowicy PONIŻEJ jquery, w zamierzeniu skutkowało $ (dokumentem) .Obecnie przetwarzane przed plikiem cookie wtyczka może zakończyć ładowanie.

przeniosłem skrypt ładowania wtyczek cookies w organizmie przed $ (document) .ready skryptu i błąd zniknął: D