Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.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 将新值设置为cookie将创建重复的cookie-jquery cookie_Javascript_Jquery - Fatal编程技术网

Javascript 将新值设置为cookie将创建重复的cookie-jquery cookie

Javascript 将新值设置为cookie将创建重复的cookie-jquery cookie,javascript,jquery,Javascript,Jquery,如果我在另一个页面上设置了cookie,那么当我试图删除cookie时会出现问题。以下是场景: 我在我的主页上设置了一个cookie值(通过将产品添加到我的篮子中),我可以在该页面上删除该值 但是,当我转到另一个页面并尝试删除同一个cookie(产品)时,cookie将使用新值再次创建,它不会重新设置我当前的cookie 我正在使用以下代码添加/删除cookie: $(".add-basket").click(function(e){ e.preventDefault(); va

如果我在另一个页面上设置了cookie,那么当我试图删除cookie时会出现问题。以下是场景:

我在我的主页上设置了一个cookie值(通过将产品添加到我的篮子中),我可以在该页面上删除该值

但是,当我转到另一个页面并尝试删除同一个cookie(产品)时,cookie将使用新值再次创建,它不会重新设置我当前的cookie

我正在使用以下代码添加/删除cookie:

$(".add-basket").click(function(e){
    e.preventDefault();
    var ean = $(this).attr('ean');
    var value = $(this).attr("value");
    var path = $(this).attr("imgpath");

    if($.cookie("mycookie")==undefined || $.cookie("mycookie")==""){
        $.cookie("mycookie" , ean + "~" + value + "~" + path);
    } else if($.cookie("mycookie").indexOf(ean) == -1 ){
        $.cookie("mycookie",$.cookie("mycookie") + "|" + ean + "~" + value + "~" + path);
    }

});

$(".remove-basket").click(function(e){
    e.preventDefault();
    var ean = $(this).attr('ean');
    var value = $(this).attr('value');
    var path = $(this).attr("imgpath");

    var val = ean + "~" + value + "~" + path; //value to be removed
    if ($.cookie("mycookie") !== undefined) {
        var cookie_val = $.cookie("mycookie");
        if (cookie_val.indexOf(val) !== -1) {
            //check value present in cookie
            var arr = cookie_val.split('|'); //remove spaces and split with |
            var index = arr.indexOf(val);//get index of value to be deleted
            arr.splice(index, 1);  //remove value from array 
            $.cookie("mycookie", arr.join('|')); //convert array to sting using join and set value to cookie
        }
    }
我错过什么了吗


请帮助

您似乎在设置cookie
路径
时遇到问题。发件人:

默认情况下,cookie的路径是创建cookie的页面的路径(标准浏览器行为)。如果要使其在整个域中可用,请使用
path:'/'
。默认值:创建cookie的页面路径


也许你的cookie只在一页上有效?您必须为cookie设置路径名

$.cookie("mycookie" , ean + "~" + value + "~" + path, { path: '/' } ); // path:'/' is setting a cookie which is valid for all pages on your domain

您需要设置cookie有效域,请尝试使用以下方法设置cookie:

$.cookie("mycookie", 'value', {path: '/'});
这将使cookie在整个站点上有效,如果这不起作用,请尝试清除旧cookie

以下是使用JSON的示例:

// sample data
var data = [
  { ean: 1, value: 2, path: 3},
  { ean: 1, value: 2, path: 3}
];

// insert data
data.push({ ean:2, value: 3, path: 4});

// save to cookie
$.cookie('mycookie', JSON.stringify(data), {path: '/'});

// load from cookie
data = JSON.parse( $.cookie('mycookie') );
因此,将处理程序更改为:

$(".add-basket").click(function(e){
    e.preventDefault();
    var ean = 1;
    var value = 1;
    var path = 1;
    var cookie = JSON.parse( $.cookie("mycookie") || '[]' );
    cookie.push({
        ean: ean,
        value: value,
        path: path
    });

    $.cookie("mycookie", JSON.stringify(cookie), {path: '/'});
});

$(".remove-basket").click(function(e){
    e.preventDefault();
    var ean = $(this).attr('ean');
    var value = $(this).attr('value');
    var path = $(this).attr("imgpath");
    var cookie = JSON.parse( $.cookie("mycookie") || '[]' );

    $.each(cookie, function (index, row) {
        if (row.value == value) {
            cookie.splice(index, 1);
        }
    });

    $.cookie("mycookie", JSON.stringify(cookie), {path: '/'});
}

您甚至不需要清除cookie,只需将路径设置为相同,例如,您可以将路径设置为“/”哪个cookie在整个应用程序/站点中都有作用域。但是,如果不指定路径,它将自动采用当前文件夹的路径,在该文件夹中放置代码文件,并从中设置cookie。

我已按照您所述设置cookie:if($.cookie(cookie)==未定义的|$.cookie(cookie)==”){$.cookie(cookie,ean+“~+value+“~+path,{path:'/'))}如果($.cookie(cookie).indexOf(ean)=-1){$.cookie(cookie,$.cookie(cookie)+“|”+ean+“~”+value+“~”+path,{path:'/});}。但这并不能解决问题:(我这样做了,当编辑cookie时,它正在用新的value@Wasiim你的意思是它不会覆盖旧的cookie?我想这是你的序列化问题,尝试使用JSON,这将很容易。是的,它不会覆盖旧的cookie。使用序列化-你可以粘贴一些代码吗?plz…似乎我有一个解决方法nd,您认为在编辑文件时使用:.escape(raw.join(“|”)怎么样cookie@Wasiim请参阅更新,尝试使用JSON而不是数据序列化。我的问题仍然存在。有关如何序列化cookie的任何帮助?