jQuery $ .cookieは関数ではありません


82

jQueryを使用してCookieを設定しようとしています。

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

しかし、ページをロードすると、「$。cookieは関数ではありません」というエラーが表示されます。これが私が知っていることです:

  • ここからjQuerycookieプラグインをダウンロードしました
  • 私はjQueryにリンクしていて、次にcookieプラグインにリンクしています。
  • jQueryとjQuery.cookieの両方が200OKで正しく読み込まれています。

私は他のいくつかの回答(ここここなど)を調べましたが、ほとんどの人がcookie.jsファイルの名前を変更することを提案しました。Cookieファイルの名前を「jquery.cookeee.js」に変更しましたが、結果は同じです。

ここで何が起こっているかについて何かアイデアはありますか?

それが役に立ったら、MVC4でWebアプリケーションを作成しています。


ブラウザのコンソールに例外はありますか?jQueryのバージョンがjQuerycookieプラグインのバージョンに適していない可能性があります
Ian

2
jQueryを2回含めていますか?(おそらくはい)。それ以外の場合は、$。noConflict()を使用しているか、$をオーバーライドする別の.jsファイルを含めています。
ケビンB

1
$ .fn.jqueryは、jquery.jsをインクルードした直後と、エラーが発生したコードの両方で何を提供しますか。
ケビンB

1
@ElliotSchmelliotはい、2番目はすべてのプラグインを含めて最初を完全に上書きするためです。
ケビンB

4
すでに答えを見つけた場合は、自分で答えることができます。これにより、他の人が回答に取り組んだり、質問を開いたりするのを防ぐことができます。
surfmuggle 2013

回答:


127

これが私が遭遇したすべての可能な問題/解決策です:

1.Cookieプラグインをダウンロードします

$.cookieは標準のjQuery関数ではないため、プラグインはここからダウンロードする必要があります。<script>必要に応じて、適切なタグを必ず含めてください(次を参照)。

2.Cookieプラグインの前にjQueryを含めます

Cookieスクリプトを含める場合は、必ずjQueryを最初に含め、次にCookieプラグインを含めてください。

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

3.jQueryを複数回含めないでください

これが私の問題でした。jQueryを複数回含めないようにしてください。もしそうなら、それは可能性があります:

  1. jQueryは正しく読み込まれます。
  2. Cookieプラグインが正しく読み込まれます。
  3. jQueryを2回目に含めると、最初のファイルが上書きされ、Cookieプラグインが破棄されます。

ASP.Net MVCプロジェクトを使用している場合は、デフォルトのjavascriptバンドルインクルードに注意してください。jQueryを2番目に含めたのは、行の下のグローバルレイアウトページの1つでした@Scripts.Render("~/bundles/jquery")

4。「。cookie」を含まないようにプラグインファイルの名前を変更します

まれに、ファイルの名前を「.cookie」を含まない名前に変更すると、このエラーが修正されました。これは、明らかにWebサーバーの問題が原因です。デフォルトでは、ダウンロードされたスクリプトのタイトルは「jquery.cookie.js」ですが、上記のように名前を「jquery_cookie.js」に変更してみてください。この問題の詳細については、こちらをご覧ください


11
私はフレームワークを使用していましたが、問題はjQueryが複数含まれていることでした。どうもありがとう !!!
jrierab 2015

githubには、プラグインがサポートされなくなったと書かれているので、ファイルを新しいバージョン(2.1.0だと思います)にアップグレードしましたが、機能しなかったため、この回答がリンクしている古いバージョンを使用する必要があります。
Erik Grosskurth 2016年

2
私にとって、jQueryは複数回追加されました
Ardalan Shahgholi 2016

「jQueryを複数回含む」コメントありがとうございます。7年後に問題が解決しました。
ErikFrantz20年

37

古いバージョンエラーを取得しているので、もしjQueryのクッキーのは、廃止されました:

$.cookie is not a function

新しいバージョンにアップグレードする必要があります。

新しいバージョンのAPIも異なります-使用するのではなく

$.cookie("yourCookieName");

あなたが使用する必要があります

Cookies.get("yourCookieName");

2
jqueryを3.3.1.jsにアップグレードします。しかし、それは正しく機能しません。「UncaughtReferenceError:Cookies is notdefined」は、変更したのと同じ行に生成されます。私と同じ人はいますか?
jong-hyeon-yeo 2018

25

jquery用にこのCookieプラグインを追加します。

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

wp_head()ワードプレスのテーマで関数の後にスクリプトを追加した場合にのみ機能しました。
リシャブ2017

必要なのはファイルへの単純なリンクだけで、これでうまくいきました。npmをすべてインストールする必要はありませんでした。
デイブ

2

スクリプトがページのフッターではなくヘッダーに含まれていることを確認してください。特にWordPressではこれは機能しませんでした:

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

最後のパラメーターは、フッターにスクリプトを含めることを示し、false(デフォルト)に変更する必要があります。それが機能した方法:

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

2

最初jquery.cookie.jsに追加してから、その関数を使用している場所にjsまたはjQueryを追加する必要があります。

ブラウザが最初にWebページをロードすると、これがロードさjquery.cookie.jsれ、その後jsまたはjQueryがロードされ、その関数が使用可能になります。


0

私もこの問題を抱えていました。本体内のスクリプトタグに$ .cookieを含む$(document).ready関数を使用し、意図したとおりにcookie jsをjqueryの下のヘッドにロードすると、$(document).readyビーイングがcookieの前に処理されることがわかりました。プラグインの読み込みが完了する可能性があります。

$(document).readyスクリプトの前にCookieプラグインの読み込みスクリプトを本文に移動すると、エラーが消えました:D


0

jQuery $ .cookieを解決することはこの問題の関数ではありませんこの問題を解決するためにjquerycdnを更新します

 <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
これを書いたときにどこで飲んだの?それらの言葉はその順序ではまったく行きません。
シェイン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.