通过javascript函数取消设置php数组元素?

时间:2016-03-21 03:59:20

标签: javascript php arrays session

假设我有一个php会话数组:

$_SESSION[MyItems]=Array('A'=>"Apple", 'B'=>"Brownie", 'C'="Coin"))

用于显示用户访问的页面上的项目,我希望用户能够使用客户端javascript函数从显示中删除一个或多个项目(即隐藏项目的内容或者将div更改为display = none ...我现在知道如何处理这类事情。)而不是让我们重新回到服务器/页面重新加载。

当javascript从视图中删除项目时,如何同时从$_SESSION[MyItems]数组中删除项目(即如果页面重新加载则不再出现?

我认为这个任务可能涉及将整个$_SESSION[MyItems]数组转换为javascript数组,从中删除项目,然后让数组的javascript版本以某种方式覆盖$_SESSION[MyItems]。这可行吗?

2 个答案:

答案 0 :(得分:1)

所有会话数据都存储在cookie中,cookie可以访问客户端和服务器。所以你可以通过编辑cookie来做到这一点,但是应该避免这种做法和you should not do this,因为会话只适用于服务器端。

希望它有所帮助:)

答案 1 :(得分:1)

这不是那么简单,因为PHP在服务器端运行,来自PHP的$_SESSION对象在客户端不可用,其中javascript运行。

你需要在你的模板的头部放一些这样的东西(假设它是带有HTML内容的.php文件):

<html>
    <head>
        ...
        <script type="text/javascript">
            //parse PHP to json-string for javascript initialisation
            var MyItems = <?php echo json_encode ($_SESSION[MyItems], true); ?>;
        </script>
    </head>
    <body></body>
</html>

然后你将在javascript中获得一个名为$_SESSION的PHP MyItems对象的副本。 但是对JS对象所做的更改不会保存到PHP对象中。 为此,您可以使用JQuery的$.post

$.post ("target.php", { "MyItems": JSON.stringify (MyItems) }, function (result) {

    if (result == "true")
        //do something
    else
        //do something else

});

target.php文件看起来像这样:

<?php

    $_SESSION['MyItems'] = json_decode ($_POST['MyItems']);
    echo "true";

?>