11

我正在使用 jQuery 开发一个使用 cookie 的应用程序。现在,它位于application.html我的 PC 桌面上。

但是,我无法存储和检索 cookie。我已按顺序在我的 HTML 文件中包含jquery-1.7.1.min.jsjson2.js和。jquery.cookie.js

这是我如何存储 cookie 以持续 7 天:

$.cookie("people", JSON.stringify(people_obj_array), {expires: 7});

全局数组people_obj_array看起来像

[
        {
            "name": "Adam",
            "age": 1,
        },
        {
            "name": "Bob",
            "age": 2,
        },
        {
            "name": "Cathy",
            "age": 3,
        },
    ]

当我用 测试 JSON 加密时alert(JSON.stringify(people_obj_array)),它看起来很好:

JSON测试

但是,当我通过以下方式检索此 cookie 时:

alert($.cookie("people"));

甚至在刷新页面之前,就会弹出一个警告,上面写着“null”。文本不应该是警报 JSON 字符串吗?我是否正确使用了 JQuery cookie 库?


只是为了澄清,这是我的测试方式:

$.cookie("people", JSON.stringify(people_obj_array), {expires: 7}); // store
alert($.cookie("people")); // attempt to retrieve

我有 Firebug,我愿意做一些控制台测试。

4

3 回答 3

11

这可能是文件在您的桌面上导致问题的事实。浏览器通常会根据接收到的域及其路径来提供 cookie。

您可能无法在设置 cookie 后立即读取它:写入 cookie 涉及在 HTTP 请求中设置标头,同样,读取它们涉及读取 HTTP 响应中的标头。

尝试在网络服务器上托管您的页面,看看是否适合您。

于 2012-01-29T19:56:19.530 回答
2

如果您在使用 cookie 插件时遇到问题,为什么不自己制作 cookie 功能呢?读取、写入和(可选)删除。

var createCookie = function(name, value, days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = '; expires=' + date.toGMTString();
    }
    else var expires = '';
        document.cookie = name + '=' + value + expires + '; path=/';
};
var readCookie = function(name) {
    var nameEQ = name + '=';
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
    return null;
};
var eraseCookie = function(name) {
    createCookie(name, '', -1);
};

我无法评论特定插件,因为我从未使用过它。但是这些功能都可以工作并且已经过测试。

所以对于你的例子:

createCookie("people", JSON.stringify(people_obj_array), 7); // store
alert(readCookie("people")); // retrieve
eraseCookie("people"); // remove
alert(readCookie("people")); // oo look i'm no longer here.
于 2012-01-29T19:58:29.920 回答
1

从我的研究来看jquery.cookie.js,它已经相当老了,似乎不再维护了。改用这个库可能会更好。它在 Google 代码上的描述是“带有 jQ​​uery 绑定和 JSON 支持的 Javascript Cookie 库”,其中包括您尝试做的所有事情的方法!

于 2012-01-29T19:57:14.970 回答