javascript - 如何将 cookie 与数组和 ajax 一起使用?
问题描述
我正在尝试为我的(电子商务)网站制作一个购物车系统,但我不知道我做错了什么。当用户单击按钮时,我想显示 cookie 中的一些元素。对于按钮,我使用了一些简单的 HTML:
<button onclick="test()">CLICK ME</button>
我附加到函数的javascript是这样的:
var httpRequest = new XMLHttpRequest();
function test() {
if (!httpRequest) {
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
httpRequest.onreadystatechange = alertContents;
httpRequest.open('GET', 'test.php?q=<?php echo $row['denumire'];?>', true);
httpRequest.send();
}
function alertContents() {
if (httpRequest.readyState === XMLHttpRequest.DONE) {
if (httpRequest.status === 200) {
document.getElementById('test_adaugare_produs_cos').innerHTML = this.responseText;
} else {
alert('There was a problem with the request.');
}
}
}
由于我处于测试阶段,我只想在页面中输出 cookie 的元素。如果我有这个工作,我的项目的其余部分很简单。文件 test.php 包含以下代码:
$cookie = $_COOKIE['cos'];
$produse = array("$cookie");
$q = $_GET['q'];
array_push($produse, "$q");
$produse = json_encode($produse);
setcookie("cos",$produse,time()+2592000);
$cookie = json_decode($_COOKIE['cos'], true);
foreach ( $cookie as $cook) {
echo $cook;
echo "<br>";
}
代码有点工作。它输出数组的最后一个元素,但其余元素(只是来自网站的产品名称,因为按钮应该使用 cookie 将元素添加到购物车中)是字符串格式。这是它的样子(点击不同的产品后):
["[\"[\\\"[\\\\\\\"[\\\\\\\\\\\\\\\"[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"ABRAZIV PRO 115*50\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/100\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/ ML\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"ABRAZIV PRO 115*50\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/100\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/ ML\\\\\\\\\\\\\\\"]\\\\\\\",\\\\\\\"ACTUATOR MTR TECH2230\\\\\\\"]\\\",\\\"ACTUATOR MTR TECH2230\\\"]\",\"ACTUATOR MTR TECH2230\"]","ACCESORII SINA PLASTIC DUBLA 3M"]
ACCESORII SINA PLASTIC DUBLA 2.5M
产品名称如下(我将它们包括在内,因为它们不是英文的,我不想造成混淆):
- ABRAZIV PRO 115*50/100/ML
- 执行器 MTR TECH2230
- ACCESORII SINA PLASTIC DUBLA 3M
- ACCESORII SINA PLASTIC DUBLA 2.5M
我试过用 cookie 中的数组做这种事情,只是将产品名称添加到数组中,但这证明很麻烦。会有更好的方法吗?我应该如何解决这个问题?
感谢您的回答!
解决方案
似乎$_COOKIE['cos']
是 JSON 编码的。但是当你初始化时$produse
,你不会解码它,你只是用编码的字符串初始化它。因此,该数组具有单个元素,该元素已被编码。然后你添加另一个元素,然后重新编码整个东西。这就是为什么你每次都会得到越来越多的斜线。
尝试这个:
$cookie = !empty($_COOKIE['cos']) ? json_decode($_COOKIE['cos'], true) : [];
$q = $_GET['q'];
array_push($cookie, $q);
$produse = json_encode($cookie);
setcookie('cos',$produse,time()+2592000);
foreach ($cookie as $cook) {
echo $cook;
echo "<br>";
}
$q
请注意,当推入数组时,我已经从周围删除了双引号;它们不是必需的,因为$q
它已经是一个字符串。
如果你想消除一些临时变量,你可以这样做:
$cookie = !empty($_COOKIE['cos']) ? json_decode($_COOKIE['cos'], true) : [];
array_push($cookie, $_GET['q']); // Alternately, $cookie[] = $_GET['q'];
setcookie('cos', json_encode($cookie), time()+2592000);
foreach ($cookie as $cook) {
echo $cook;
echo "<br>";
}
推荐阅读
- sql - 如何按Oracle中出现次数最多的项目进行分组
- reactjs - 用户拖动和结束拖动元素时如何防止打开链接?
- python - 即使满足条件,if 语句也不会运行
- flutter - 如何在 Flutter Web 中启动 WhatsApp 或从浏览器启动 WhatsApp?
- ansible - Ansible +外部shell脚本如何循环输出
- python - 我需要从链接列表中访问一个元素,就像我在普通列表中所做的那样,但不能 - python
- r - 结合 base 和 dplyr:使用 as.matrix() 强制在最终对象中创建行号
- r - 从 R 中的向量中的元素创建唯一可能的组合
- sql - 使用映射表数据值动态选择数据
- python - 在 Python 中排除隐藏文件