jQuery $.cookie不是一个函数。

90

我正在尝试使用jQuery设置cookie:

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

但当我加载我的页面时,收到错误"$ .cookie不是一个函数"。 这里是我知道的:

  • 我已经下载了jQuery cookie插件这里
  • 我链接了jQuery然后是cookie插件。
  • jQuery和jQuery.cookie都以200 OK正确加载。

我查看了其他几个答案(这里这里等),大多数人建议将cookie.js文件重命名。 我已将我的cookie文件重命名为“jquery.cookeee.js”,但结果相同。

你对这里发生了什么有什么想法吗?

如果有帮助的话,我正在MVC 4中创建Web应用程序。


1
你的浏览器控制台有任何异常吗?也许你使用的jQuery版本与jQuery cookie插件不兼容。 - Ian
3
您是否重复引用 jQuery 库?(很可能是)。否则,您可能正在使用 $.noConflict() 方法,或在引用另一个 .js 文件时覆盖了 $ 符号。 - Kevin B
1
在包含jquery.js文件后,$.fn.jquery会立即提供给你什么?以及在代码中出现错误时它会提供给你什么? - Kevin B
1
@ElliotSchmelliot 是的,第二个将完全覆盖第一个,包括所有插件。 - Kevin B
4
如果你已经找到了答案,你可以自己回答它。这可以防止其他人继续在问题上工作或者甚至打开这个问题。 - surfmuggle
显示剩余4条评论
7个回答

137

以下是我遇到的所有可能问题/解决方案:

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 覆盖了第一次引入的 jQuery 并销毁了 cookie 插件。

对于使用 ASP.Net MVC 项目的用户,请注意默认的 JavaScript bundle 包含。我的第二次引入的 jQuery 在全局布局页面中,在此行下面:@Scripts.Render("~/bundles/jquery")

4. 重命名插件文件以不包括".cookie"字样

在某些罕见情况下,将文件重命名为不包括 ".cookie" 的名称可以修复此错误,这似乎是由于 web 服务器问题引起的。默认情况下,下载的脚本标题为 "jquery.cookie.js",但尝试将其重命名为如上所示的 "jquery_cookie.js" 等其他名称。更多细节可以在这里找到。


14
我使用了一个框架,问题出在多次引用jQuery上。非常感谢! - jrierab
GitHub 上说这个插件已经不再支持了,所以我升级了文件到较新的版本(我想是2.1.0),但它没有起作用,因此您需要使用本答案链接的旧版本。 - Erik Grosskurth
2
对我来说,jQuery被添加了不止一次。 - Ardalan Shahgholi
2
感谢您在“多次包含jQuery”评论中的建议。它解决了7年后的一个问题。 - Erik Frantz
它仍然在那里;最终我将脚本标签移动到页脚下面,因为它在主页面的头部找不到。我还验证了没有其他捆绑包或脚本标签多次加载jQuery,只有一次在主头标签中引用。 - Tim

41

jQuery Cookie的旧版本已被弃用,所以如果你遇到以下错误:

$.cookie is not a function

你应该升级到新版本。 新版本的API也有所不同 - 不再使用
$.cookie("yourCookieName");

你应该使用

Cookies.get("yourCookieName");

3
我把 JQuery 升级到了 3.3.1.js,但是它不能正常工作。在我修改的同一行上生成了“未捕获的引用错误:Cookies未定义”。有和我一样的人吗? - JongHyeon Yeo
@JongHyeon Yeo,我正在运行3.3.1版本,而且$.cookie对我来说是有效的。希望你在这四年中已经解决了它! - Tim

27

请为jQuery添加此Cookie插件。

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

只有在我将你提供的脚本添加到我的WordPress主题中的wp_head()函数之后,它才能正常工作。 - Rishabh
我只需要一个简单的文件链接,这样就可以很好地完成工作了。不需要所有那些npm安装。 - Dave

2

您需要先添加 jquery.cookie.js,然后再添加您正在使用该函数的 js 或 jQuery。

当浏览器首次加载网页时,它首先加载这个 jquery.cookie.js,然后再加载您的 js 或 jQuery,现在该函数可供使用。


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');

1
我也遇到了这个问题。我发现,在body内的script标签中包含一个$.cookie函数的$(document).ready函数,同时将cookie js在head中按照预期的顺序放置在jquery之后加载,导致$(document).ready在cookie插件完成加载之前被处理。
我将cookie插件的加载脚本移到了$(document).ready脚本之前,并且错误消失了 :D

0
解决jQuery $.cookie is not a function的问题 通过更新jQuery CDN来解决这个问题
 <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>

6
你写这个的时候喝醉了吗?这些词根本不是按照那个顺序排列的。 - Shayne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接