【问题标题】:Store JSON retrieved via AJAX in a cookie将通过 AJAX 检索到的 JSON 存储在 cookie 中
【发布时间】:2014-04-19 02:24:00
【问题描述】:

我想在 cookie 中保存一些 json 数据,并使用 jquery cookie 在不同的页面中检索它 这是我获取数据并存储它的方法。

        $.ajax({
            type: "POST",
            url: "V2_Loader.aspx/GetMenuData",
            data: "{id:" + id + "}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
            menus = response.d;
            $.cookie('menu-data', menus);
          }
     }

在另一个页面中,我尝试像这样检索它。

 menus = JSON.parse($.cookie("menu-data"));

但我收到“JavaScript 运行时错误:无效字符” 我试过打开 json 标志 $.cookie.json = 真; 在存储它之前以及当我尝试打印它时。 像这样

        var result;
            for (var i = 0; i < menus.length; i++) {
                result += menus[i].menuText + ', ';
            }
            alert(result);

我得到了一个未定义的数组,像这里一样打印printed array

这就是我的回复看起来像response

关于我应该如何存储和检索它的任何建议?

【问题讨论】:

  • 我已经删除了您的标签和标题中的 ASP.NET 引用,因为您的问题是客户端和提供数据的服务器端技术无关紧要。
  • data: "{id:" + id + "}" 应该是:data: {id: id }
  • id 是传递给检索数据的函数的变量,这就是我将它连接到数据字符串的原因,看起来它似乎没有问题
  • @hjpotter92 这是不正确的。他专门将 JSON 发布到服务器,因此是 json contentType。
  • 你为什么使用async: false

标签: jquery jquery-cookie


【解决方案1】:

$.cookie('menu-data', menus); 中,menus 不是 json。你需要把它转成json。

$.cookie('menu-data', JSON.stringify(menus));

由于 json 的大小,您可能会遇到 cookie 长度限制。

【讨论】:

  • 我认为通过请求 JSON 响应将是 json,我已经换了行,但我似乎无法将其转回 json 集合。这个工作: var tst = jQuery.parseJSON($.cookie("menu-data")); ?
  • 是的,应该可以,但是 “由于 json 的大小,您可能会遇到 cookie 长度限制。”
  • 由于你设置了dataType: "json",,jquery会自动将json转换为对象。这就是为什么你能够做到menus = response.d;。否则,response.d 将是 undefined
  • 啊,我知道了,我已经重新设计了 json 以简化为 pastebin.com/f0gDQTRA,它要小得多,每当我尝试将其转换回来时,我总是不确定,有什么想法吗?
【解决方案2】:

作为使用 cookie 的替代解决方案,您可以在浏览器中使用 sessionStorage

$ajax({
  ...,
  success: function (response) {
    sessionStorage.setItem('menu-data', JSON.stringify(response.d));
  }
});

var menus = JSON.parse(sessionStorage.getItem('menu-data'));

【讨论】:

  • 哦,那太棒了,我不知道我能做到这一点,但是当我做 JSON.parse 时,我得到“无效字符”我的响应看起来像有效的 json
  • 嗯,在 Chrome 的控制台中玩了一些之后,似乎sessionStorage 字符串化数据的默认方式在使用JSON.parse() 解析为对象时存在错误。我已经用现在应该起作用的方法编辑了我的回复。
  • 啊,工作,太棒了,我什至不知道 sessionStorage 存在感谢您的建议,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
相关资源
最近更新 更多