jQuery $ .cookie không phải là một hàm


81

Tôi đang cố gắng đặt cookie bằng jQuery:

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

Nhưng khi tôi tải trang của mình, tôi nhận được lỗi "$ .cookie không phải là một chức năng". Đây là những gì tôi biết:

  • Tôi đã tải xuống plugin cookie jQuery tại đây .
  • Tôi đang liên kết với jQuery và THÌ là plugin cookie.
  • Cả jQuery và jQuery.cookie đều đang tải chính xác với 200 OK.

Tôi đã xem xét một số câu trả lời khác ( ở đâyở đây trong số những câu trả lời khác), mà hầu hết mọi người đề xuất đổi tên tệp cookie.js. Tôi đã đổi tên tệp cookie của mình là "jquery.cookeee.js" nhưng kết quả vẫn như cũ.

Bất kỳ ý tưởng về những gì đang xảy ra ở đây?

Nếu nó hữu ích, tôi đang tạo một ứng dụng web trong MVC 4.


Bất kỳ ngoại lệ nào trong bảng điều khiển của trình duyệt của bạn? Có thể phiên bản jQuery của bạn không phù hợp với phiên bản plugin cookie jQuery của bạn
Ian

2
Bạn có bao gồm jQuery hai lần không? (rất có thể là có). Nếu không, bạn đang sử dụng $ .noConflict () hoặc bạn đang bao gồm một tệp .js khác ghi đè $.
Kevin B

1
$ .Fn.jquery cung cấp cho bạn điều gì ngay lập tức sau khi bao gồm jquery.js và trong mã của bạn nơi lỗi xảy ra.
Kevin B

1
@ElliotSchmelliot Có, vì cái thứ hai sẽ ghi đè hoàn toàn cái thứ nhất, bao gồm tất cả các plugin.
Kevin B

4
Nếu bạn đã tìm thấy câu trả lời, bạn có thể tự mình trả lời. Điều này ngăn cản, người khác đang tìm câu trả lời hoặc thậm chí mở câu hỏi.
lướt sóng

Câu trả lời:


126

Dưới đây là tất cả các vấn đề / giải pháp có thể xảy ra mà tôi đã gặp phải:

1. Tải xuống plugin cookie

$.cookiekhông phải là một hàm jQuery chuẩn và bạn cần tải xuống plugin tại đây . Đảm bảo bao gồm <script>thẻ thích hợp khi cần thiết (xem tiếp theo).

2. Bao gồm jQuery trước plugin cookie

Khi bao gồm tập lệnh cookie, hãy đảm bảo bao gồm jQuery FIRST, sau đó là plugin cookie.

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

3. Không bao gồm jQuery nhiều lần

Đây là vấn đề của tôi. Đảm bảo rằng bạn không bao gồm jQuery nhiều lần. Nếu là bạn, có thể là:

  1. jQuery tải chính xác.
  2. Plugin cookie tải chính xác.
  3. Việc bao gồm jQuery thứ hai của bạn sẽ ghi đè phần đầu tiên và phá hủy plugin cookie.

Đối với bất kỳ ai sử dụng các dự án ASP.Net MVC, hãy cẩn thận với các bao gồm gói javascript mặc định. Lần đưa jQuery thứ hai của tôi vào một trong các trang bố cục chung của tôi dưới dòng @Scripts.Render("~/bundles/jquery").

4. Đổi tên tệp plugin để không bao gồm ".cookie"

Trong một số trường hợp hiếm hoi, việc đổi tên tệp thành thứ KHÔNG bao gồm ".cookie" đã khắc phục được lỗi này, dường như do sự cố máy chủ web. Theo mặc định, tập lệnh đã tải xuống có tiêu đề là "jquery.cookie.js" nhưng hãy thử đổi tên nó thành "jquery_cookie.js" như hình trên. Thêm chi tiết về vấn đề này ở đây .


11
Tôi đang sử dụng một khuôn khổ và vấn đề là với việc bao gồm nhiều jQuery. Cảm ơn nhiều !!!
jrierab

Nó nói trên github rằng plug in không còn được hỗ trợ nữa nên tôi đã nâng cấp tệp lên phiên bản mới hơn (tôi nghĩ 2.1.0) và nó không hoạt động nên bạn phải sử dụng phiên bản cũ mà câu trả lời này liên kết tới.
Erik Grosskurth

2
Đối với tôi jQuery đã được bổ sung nhiều hơn một lần
Ardalan Shahgholi

Cảm ơn bạn đã nhận xét "bao gồm jQuery nhiều hơn một lần". Nó đã giải quyết một vấn đề 7 năm sau đó.
Erik Frantz

36

Các phiên bản cũ của jQuery Cookie đã bị phản đối, vì vậy nếu bạn đang nhận được lỗi:

$.cookie is not a function

bạn nên nâng cấp lên phiên bản mới .

API cho phiên bản mới cũng khác - thay vì sử dụng

$.cookie("yourCookieName");

bạn nên sử dụng

Cookies.get("yourCookieName");

2
Tôi nâng cấp jquery của mình lên 3.3.1.js. Nhưng nó không hoạt động bình thường. Lỗi 'Uncaught ReferenceError: Cookies không được xác định' được tạo trên cùng một dòng mà tôi đã thay đổi. Có ai giống tôi không?
jong-hyeon-yeo

25

thêm plugin cookie này cho jquery.

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

Nó chỉ hoạt động khi tôi thêm cho bạn tập lệnh sau wp_head()hàm trong chủ đề wordpress của tôi.
Rishabh

Tất cả những gì tôi cần là một liên kết đơn giản đến một tệp và điều này đã hoàn thành công việc một cách xuất sắc. Không cần tất cả cài đặt npm đó.
Dave

2

Kiểm tra để đảm bảo rằng bạn đã đưa tập lệnh vào đầu trang chứ không phải ở chân trang. Đặc biệt trong WordPress, cái này không hoạt động:

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

Tham số cuối cùng cho biết bao gồm tập lệnh ở chân trang và cần được thay đổi thành sai (mặc định). Cách nó hoạt động:

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

2

Bạn nên thêm trước jquery.cookie.jssau đó thêm js hoặc jQuery của bạn vào nơi bạn đang sử dụng hàm đó.

Khi trình duyệt tải trang web đầu tiên, nó sẽ tải trang này jquery.cookie.jsvà sau đó bạn tải js hoặc jQuery và bây giờ chức năng đó đã có sẵn để sử dụng


0

Tôi cũng gặp vấn đề này. Tôi phát hiện ra rằng có một hàm $ (document) .ready bao gồm $ .cookie trong thẻ script bên trong nội dung khi có cookie js tải ở phần đầu BÊN DƯỚI jquery như dự định dẫn đến $ (document). Đã được xử lý trước cookie plugin có thể hoàn tất quá trình tải.

Tôi đã di chuyển tập lệnh tải plugin cookie trong phần thân trước tập lệnh $ (document) .ready và lỗi đã biến mất: D


0

Giải quyết jQuery $ .cookie không phải là một hàm này Vấn đề jquery cdn cập nhật để giải quyết vấn đề này

 <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>

3
Nơi bạn say khi viết cái này? Những từ đó không đi theo thứ tự đó chút nào.
Shayne
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.