为什么jQuery.cookie为单个字符串值返回“[object Object]”

时间:2012-11-15 22:28:44

标签: javascript jquery ruby-on-rails

我在这样的Rails上设置了一个cookie,

cookies[:account] = { :value => @account.to_s, :expires => 3.month.from_now }

这似乎工作得很好,一个简单的debug @account显示

--- myvalue
…

但是当使用jQuery.Cookie调用cookie时,它会返回"[object Object]"

> $.cookie('account');
"[object Object]"

知道为什么会发生这种情况以及如何解决它?

5 个答案:

答案 0 :(得分:3)

我知道我在这里的答案已经很晚了,但我想我也会在这方面发布我的解决方案。我在这个jQuery Cookie返回[object Object]的问题上争了好几个小时,发现了一些可能导致这种情况的案例: -

  • 相同的Cookie名称,但路径不同
  • 我发现传递路径/到期的参数,插件有时会将其视为设置值,并尝试设置类似JSON的对象,路径和到期时间为值。
  • 加载脚本两次,并在加载
  • 上运行cookie集代码
  • 刷新脚本的AJAX加载内容可能导致此问题发生。

最后,我决定使用localStorage选项,因为我存储的数据非常小,不值得浪费时间试图让jQuery cookie工作。

我希望这可以帮助别人,并将他们从沮丧的时间中拯救出来!

答案 1 :(得分:2)

对于遇到此问题的任何其他人,请检查以确保您没有多个同名的Cookie(具有不同的路径或过期)。这可能导致$ .cookie()返回[object Object]

答案 2 :(得分:1)

[object Object]Object.toString()的返回值,因此这意味着$ .cookie('account')返回一个非Number非String对象。

在开始计算返回值中的内容时(为了帮助您确定返回的对象中的内容),可以循环查看属性以找出它。

所以,就像这样:

var obj = $.cookie('account');
var msg = [];
for(var i in obj)  msg.push( i +" = " + obj[i]);
alert(msg.join("\n")); // or console.log(msg.join("\n"));

答案 3 :(得分:1)

您可以使用Mozilla Library。 你将能够像这样设置和获取cookie

docCookies.setItem(name, value);
docCookies.getItem(name);

答案 4 :(得分:0)

Cookie的最大大小仅为4kb。这可能是其中一个原因。

至于我的情况。单独查看数据肯定会超过4kb。

我的替代方案是使用localStorage。