使用ajax将会话中的变量添加到另一个会话中

时间:2018-06-28 12:50:49

标签: javascript ajax session cart session-storage

我是JavaScript的新手,正在尝试从“名称”传递会话变量,该会话变量具有已使用PHP分配的变量,并在单击按钮时将其传递到“ cartItem”。

据我所知,当前代码将'Name'的值存储到var item中,然后向服务器请求HTML以返回并使用存储在var item中的值更新会话变量'cartItem'。

按钮和脚本:

<button id='addToCart' onclick='addToCart'>Add to cart</button>
                        <script>
                            function addToCart(){
                                var item = sessionStorage.getItem('Name');
                                item = new XMLHttpRequest();
                                item.onreadystatechange = function(){
                                    if (this.readyState == 4 && this.status == 200){
                                        sessionStorage.setItem('cartItem', item);
                                    }          
                                }
                            }
                        </script>

cartItem然后使用在所有页面上调用的函数显示在我的导航栏中

                        <span class='item-info'>
                        <span>" . $_SESSION['cartItem'] . "</span>
                    </span>

但是没有显示。任何建议都会得到很大的接受。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,那么您正在使用 sessionStorage 对象在Javascript / HTML文档中存储PHP会话变量值,对吗?如果是这样,那么请理解,当您尝试更改一个值时,您仅在 client 端进行了更改,服务器端(或PHP端)保持不变。

看起来您对XMLHttpRequest有正确的想法,但是为了完成您需要做的事情,您需要制作一个PHP脚本,该Javascript函数将使用该脚本。这是一个小模型:

<?php
//NOTE: this does not do any input sanatation

//name of this script is changeVal.php
$keyAr = ["Name","Price","Value","Other"];
if (in_array($_POST['key'],$keyAr) {
    $_SESSION[$_POST['key']] = $_POST['val'];   
}

我有意以这种方式使用数组,而不是 $ _ SESSION [$ _ POST ['key']] ,这样潜在的黑客就无法更改ANY会话变量的值。

>

有了以上脚本后,您可以向该脚本发出ajax请求,其中 key 是要更改的var的名称,而 val 是更改为。

注意::这不会对输入材料进行任何清理或保护。这只是一个简单的模型。

答案 1 :(得分:0)

您已创建XMLHttpRequest对象,但尚未打开URL或发送请求。

示例(未经测试):

var name = sessionStorage.getItem('Name');
var item = new XMLHttpRequest();
item.open("GET", "http://www.example.com/endpoint/" + name);
item.send();

此后,对象“ item”将包含诸如响应正文和HTTP状态代码之类的信息。