Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么jQuery cookie实际上没有设置cookie?_Javascript_Jquery_Json_Jquery Cookie - Fatal编程技术网

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

Javascript 为什么jQuery cookie实际上没有设置cookie?,javascript,jquery,json,jquery-cookie,Javascript,Jquery,Json,Jquery Cookie,我正在使用jQuery开发一个使用cookie的应用程序。现在,它位于我的电脑桌面上的application.html 但是,我无法存储和检索cookie。我在HTML文件中按顺序包括了jquery-1.7.1.min.js、json2.js、和jquery.cookie.js 以下是我如何将cookie保存7天: $.cookie("people", JSON.stringify(people_obj_array), {expires: 7}); 全局数组人员对象数组如下所示 [

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

但是,我无法存储和检索cookie。我在HTML文件中按顺序包括了
jquery-1.7.1.min.js
json2.js
、和
jquery.cookie.js

以下是我如何将cookie保存7天:

$.cookie("people", JSON.stringify(people_obj_array), {expires: 7});
全局数组
人员对象数组
如下所示

[
        {
            "name": "Adam",
            "age": 1,
        },
        {
            "name": "Bob",
            "age": 2,
        },
        {
            "name": "Cathy",
            "age": 3,
        },
    ]
当我使用
警报(JSON.stringify(people\u obj\u array))
测试JSON加密时,它看起来很好:

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

alert($.cookie("people"));
在刷新页面之前,会弹出一个警告,内容为“null”。文本不应该是警告JSON字符串吗?我是否正确使用JQuery cookies库


为了澄清,以下是我测试的方式:

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

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

可能是文件在您的桌面上造成了问题。浏览器通常根据接收到的域和路径提供cookie

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


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

根据我的研究
jquery.cookie.js
相当旧,似乎不再被维护。您可能会更幸运地使用。它在Google代码中的描述是“带有jQuery绑定和JSON支持的Javascript Cookie库”,它包含了您尝试执行的所有操作的方法

如果您在使用cookies插件时遇到问题,为什么不自己编写cookie函数呢?读、写和(可选)删除


我认为问题在于没有为本地磁盘上的文件定义cookie机制。您是否尝试过设置本地web服务器并将文件作为
http://localhost/application.html
?谢谢!我最后只使用了本地存储。它更简单,可以在本地和web服务器上工作。当然,缺点是旧的浏览器不支持它,这对我来说很好。确定这适用于本地磁盘上的网页吗?好吧,有些浏览器根本不处理本地cookies。我还没有测试过这种情况。。但是,如果Cookie在本地不可用,那么假设OP使用的是现代浏览器,本地存储应该可以解决。谢谢!本地存储正在出色地工作。这也很简单。谢谢,我在一个公共网络服务器上托管了这个网站,cookies工作正常。这个页面有更多的细节:@DavidFaux看起来你在使用Chromium,所以我可以假设你也在使用linux。。。如果您想设置本地Web服务器进行测试,您可以
sudo apt get install lamp server^
然后
sudo adduser www data
,然后执行以下两个命令
sudo chown-R www-data:www-data/var/www
sudo-chmod-rg+rw/var/www
应该就可以了!然后,您所有的web开发人员都进入
/var/www
,您可以导航到jquery.cookie的最后一次更新,这是7天前的2013-09-11。我们正在使用那个非常有用的组件。可能是他们又开始开发了。当我发表这一评论时,图书馆已经两年多没有更新了。截至今天,即2015年10月28日,该项目已经完全更新,并具有不同的名称和实施方式:。。。旧的jquery.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.