我是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>
但是没有显示。任何建议都会得到很大的接受。
答案 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状态代码之类的信息。