【问题标题】:Unset a php array element via javascript function?通过javascript函数取消设置php数组元素?
【发布时间】:2016-03-21 12:25:05
【问题描述】:

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

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

用于在用户访问的页面上显示项目,我希望用户能够使用客户端 javascript 函数从显示中删除一个或多个项目(即隐藏项目的东西或将 div 更改为 display=none...我现在知道该怎么做。)而不是返回服务器/页面重新加载。

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

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

【问题讨论】:

    标签: javascript php arrays session


    【解决方案1】:

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

    希望对你有帮助:)

    【讨论】:

    • 我想我已经养成了不必要地使用 $_SESSION 数组的坏习惯。假设我们忘记了 $_SESSION 并假设我们只是在谈论 $MyItems?在我反思这一点时,我认为我不必在这种情况下使用 $_SESSION。
    【解决方案2】:

    这不是那么简单,因为 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 中拥有一个名为 MyItems 的 PHP $_SESSION 对象的副本。 但是对 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";
    
    ?>
    

    【讨论】:

    • 谢谢。正如我对先前的回复所评论的那样,我可能根本不需要涉及 $_SESSION。我可能会使用 $.post 在服务器端数据库中添加/删除值,但我想我在您的响应中看到了这一点。今晚写代码太累了,但明天再试试。
    • 您可以将数据保存在您想要的任何位置,发送保持不变。 ;) 晚安,伙计。
    猜你喜欢
    • 2011-04-09
    • 1970-01-01
    • 2011-11-02
    • 2018-07-16
    • 2010-09-17
    • 2015-01-18
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多