【问题标题】:Set and Get array from cookies with js-cookie and JSON.parse使用 js-cookie 和 JSON.parse 从 cookie 中设置和获取数组
【发布时间】:2020-04-13 02:27:32
【问题描述】:

我正在使用 js-cookie 来存储数据并将它们取回,我正在尝试处理一个数组变量,但我无法维护它的格式。这是创建、检索、更改和保存 cookie 数据的过程,它可以工作,但只是第一次,因为我无法

// store array in cookie  
Cookies.set('points', '0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0', { expires: 30 });

// get data from cookie into a variable (becomes a string)  
points = Cookies.get('points');

// convert to object with (length 12)
points = JSON.parse("[" + points + "]");

// change value of the array in the varable position
points[playerId]++;

// save data in cookie
Cookies.set('points', points, {expires: 30});

这仅在第一次时有效,以后任何时候我都会出错并且数组的长度为 1。我确定这是因为我缺少方括号,但如果我尝试:

Cookies.set('points', '[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]', { expires: 30 });

变量变成长度为 1 的对象,它不起作用。

【问题讨论】:

  • 尝试 JSON.stringify(points);在调用 Cookie.set 之前
  • 试过了,但仍然得到长度 1。

标签: javascript cookies js-cookie


【解决方案1】:

第二次失败的原因是您将数组作为第二个参数传递给Cookies.set,并假设这将在cookie 中以逗号分隔的字符串结束。但是在这种情况下,js-cookie 会通过添加方括号来转换为字符串。

所以非常快速的解决方案是改变这个:

Cookies.set('points', points, {expires: 30});

到:

Cookies.set('points', points.toString(), {expires: 30});

但是,最好使用JSON.stringifyJSON.parse 进行编码和解码,而不用“自己”进行任何字符串操作,如下所示:

var points = Array(12).fill(0);
Cookies.set('points', JSON.stringify(points), { expires: 30 });
var points = JSON.parse(Cookies.get('points'));
points[0]++;
Cookies.set('points', JSON.stringify(points), {expires: 30});
// ...etc

【讨论】:

  • 如果我尝试var points = JSON.parse(Cookies.get('points')); 我在控制台中得到SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data,我认为这是因为方括号,其余的工作。
  • 如果你从头开始,使用我提供的最后一个代码块,确保Cookes.set 在任何Cookies.get 之前执行,它将正常工作。方括号是 JSON 表示法的一部分,所以这不是问题。您可以随时检查Cookies.get('points') 的值是什么,而无需执行JSON.parse,因此您可以看到有问题的值是什么。
猜你喜欢
  • 2017-09-05
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
  • 2021-12-18
  • 2018-04-01
相关资源
最近更新 更多