繁体   English   中英

在 jquery 中使用 array() 设置 cookie

[英]Set cookie with array() in jquery

我希望能够检查是否设置了 cookie(id):如果未设置,则创建它。 如果设置,则检索值(= 数组)。 如何从 cookie 中检索数组? 我听说我必须使用 JSON,但我不确定这将如何与以下代码一起使用?

function start(id){
 if (document.cookie.indexOf('id') === -1 ) {
     setCookie('id', id, 7);
    } 
 else {
    var playedID = [GET COOKIE ARRAY]
    playedID.push(id); 
    setCookie('id',playedID);
  } 
}

这是一种基于一些辅助函数的方法,可确保您正确解析和字符串化 cookie。

getCookie 和 setCookie 来自https://www.w3schools.com/js/js_cookies.asp

 // This won't run due to security policies on this site, but you can run it in the dev tools and see. function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); var expires = "expires=" + d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } function getCookieArray(cname) { var cookie = getCookie(cname); return cookie? JSON.parse(cookie): []; } function pushToCookieArray(cname, cvalue, exdays) { var cookieArray = getCookieArray(cname); cookieArray.push(cvalue); setCookie(cname, JSON.stringify(cookieArray), exdays); } function start(id) { pushToCookieArray('id', id, 7); console.log(getCookieArray('id')); } start(5); start(6); start(8);

  1. 首先,cookie 不是存储为数组而是字符串:如果您在控制台中键入document.cookie ,您将从正在访问的网站中获取所有 cookies,并以逗号分隔。

如此处所述: https://www.w3schools.com/js/js_cookies.asp ,您必须创建自定义 function 才能访问所需的 cookie。

  1. 那么你 cookie 的值仍然是一个字符串,所以如这里所解释的,如果你想保存一个 id 数组,你必须使用JSON.stringify将你的数组编码为字符串: 我想将 Javascript 数组存储为 Cookie

然后您可以创建它或更新它的值:


function getCookie(cname) {
  var name = cname + "=";
  var decodedCookie = decodeURIComponent(document.cookie);
  var ca = decodedCookie.split(';');
  for(var i = 0; i <ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}

function setCookie(cname, cvalue) {
  document.cookie = cname + "=" + cvalue + ";";
}

function start(id){
 if (getCookie('id') === '' ) {
     setCookie('id', JSON.stringify([+id]));
    }
 else {
    let ids = JSON.parse(getCookie('id'))
    console.log(ids)
    ids.push(+id); 
    setCookie('id', JSON.stringify(ids));
  } 
}

function sendID(id) {
  console.log(document.getElementById("user-id").value)
  start(id);
  alert(getCookie("id"))
}

这是一个工作示例: https://codepen.io/adrientiburce/pen/ExVbYWy?editors=1010

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM