javascript - 如何将cookie与数组和ajax一起使用?

标签 javascript php ajax cookies

我正在尝试为我的(电子商务)网站制作一个购物车系统,但我不知道我做错了什么。我想在用户单击按钮时显示 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
  • 配件新浪塑料 DUBLA 3M
  • 配件新浪塑料杜布拉 2.5M

我尝试过用 cookies 中的数组来做这种事情,只是将产品名称添加到数组中,但这被证明很麻烦。还有更好的办法吗?我应该如何解决这个问题?

感谢您的回答!

最佳答案

似乎$_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>";
}

关于javascript - 如何将cookie与数组和ajax一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50822589/

相关文章:

javascript - 使用 .html() 隐藏 <div> 中的内容而不隐藏内部 <div>

javascript - Angular - 使用 $scope 中的数字添加输入的值

javascript - 将多个对象缩减为一个,将值加在一起

javascript - 资源加载器出了什么问题?

php - 如何在不使用 ajax 重新加载的情况下提交我的表单?

javascript - JQuery-Ajax : encodeUriComponent not working (EncodeUri does)

javascript - 如何在打开连接时从 Javascript 发送一些附加数据,例如用户名或时间?

php - 'P' 在 DateInterval 格式中代表什么?

javascript - 更改 Ajax Post 参数并根据交替的依赖下拉列表返回 HTML

php - 使用 jQuery AJAX 传递复选框数据