【问题标题】:Why jQuery.cookie returns "[object Object]" for a single string value为什么 jQuery.cookie 为单个字符串值返回“[object Object]”
【发布时间】:2012-11-15 22:28:44
【问题描述】:

我这样在 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]"

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

【问题讨论】:

  • 你改变了 jQuery Cookie 的任何参数吗?
  • 没有。没有改变任何东西。

标签: javascript jquery ruby-on-rails


【解决方案1】:

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

  • cookie 名称相同,但路径不同
  • 我发现传递了 path/expiry 的参数,插件有时会将其视为我正在设置一个值,并且它试图设置一个类似 JSON 的对象,其中 path 和 expiry 作为值。
  • 加载脚本两次,cookie 集代码在加载时运行
  • AJAX 加载的内容刷新脚本可能会导致出现此问题。

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

我希望这对其他人有所帮助,并使他们免于遭受我所经历的挫折!

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      [object Object] 是来自Object.toString() 的返回值,因此这意味着 $.cookie('account') 正在返回一个非数字、非字符串对象。

      开始找出返回值中的内容(以帮助您确定返回的对象中的内容)的方法是遍历属性以找出答案。

      所以,像这样:

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

      【讨论】:

      • 已解决。我不小心覆盖了 cookie。
      • 这实际上返回“[ o b j e c t O b j e c t ]”。不是很有用。
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        至于我的情况。单看数据,它肯定超过 4kb。

        我的替代方案是使用 localStorage。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-13
          • 2020-08-30
          • 2021-11-27
          • 2011-05-22
          • 2020-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多