为什么jQuery cookie实际上没有设置cookie?

时间:2012-01-29 19:45:06

标签: javascript jquery json jquery-cookie

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

但是,我无法存储和检索cookie。我按顺序在HTML文件中添加了jquery-1.7.1.min.jsjson2.jsjquery.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,
        },
    ]

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

JSON test

但是,当我通过以下方式检索此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,我愿意做一些控制台测试。

3 个答案:

答案 0 :(得分:11)

这可能是因为桌面上的文件导致了问题。浏览器通常通过根据收到的域及其路径提供cookie来表现。

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

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

答案 1 :(得分:2)

如果你在使用cookies插件时遇到麻烦,为什么不组成自己的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.

答案 2 :(得分:1)

从我的研究jquery.cookie.js相当陈旧,并且似乎不再需要维护。您可能会使用this library获得更好的运气。它在Google Code上的描述是“带有jQuery绑定和JSON支持的Javascript Cookie库”,并包含了您尝试做的所有事情的方法!