【问题标题】:Send Session variable from Ajax to PHP将 Session 变量从 Ajax 发送到 PHP
【发布时间】:2012-12-30 07:06:12
【问题描述】:

我在一个页面上有 4 个按钮,每个按钮都有自己的按钮。单击按钮时,页面不会刷新,也不会打开新页面。

当按下按钮时,我想通过 Ajax 以会话的形式将该按钮的 ID 发送到 php 文件。 4 个按钮中的每一个都有不同的 ID (1,2,3,4)。 如果用户单击一个按钮,然后单击第二个按钮等,我想将每个单击的按钮 ID 添加到此会话中。

这是我目前所拥有的:

jquery:

     $(document).ready(function() {  
     $('a[name=add]').click(function(e) {
     session = $(this).attr('id')

     $.post('sessions.php', {session:session}
    );              
     });
     });

所以这只是检查一个名为“add”的按钮是否已被点击(所有 4 个按钮都具有该名称),并获取按钮 ID 并将其发送到 session.php

PHP:

    <?php
    session_start();
    $_SESSION['ids'] = $_POST['session'];  
    ?>

只需创建会话。

我遇到的问题是 PHP 会话正在获取单击的第一个按钮的 ID,仅此而已。如果单击另一个按钮,Ajax 会发布按钮 ID,但会话只保留单击的第一个按钮的 ID。

如何将点击的下一个按钮的 ID 添加到会话中。

示例:如果单击按钮 1 和 3,我需要会话具有 ID 1 和 3。

【问题讨论】:

    标签: php jquery ajax session


    【解决方案1】:
    session_start();
    
    // prepare $_SESSION['ids']
    if ( ! is_array($_SESSION['ids']))
    {
        $_SESSION['ids'] = array();
    }
    
    // fill $_SESSION['ids'] only with new $_POST['session'] posted
    if ( ! in_array($_POST['session'], $_SESSION['ids']))
    {
        $_SESSION['ids'][] = $_POST['session'];
    }
    

    【讨论】:

    • 我如何从数组中获取每个单独的值,以便我可以在 MySQL 数据库中搜索它?
    • foreach ($_SESSION['ids'] as $value) { /* use $value to search in DB */ }
    • 谢谢,但是只有在单击 1 个按钮(数组中的 1 个结果)时才有效,如果单击 2 个按钮(2 个 ID 存储在会话数组中)它不起作用。
    • 你一定有基本的php问题。深入了解foreach 如果您按照说明使用我的代码,它必须工作...我建议您使用 firebug 调试 AJAX 帖子...
    • 搞定了,只是因为 ID 显示为单个数字,例如; 123,而不是 1、2、3。只是做了一个快速的内爆来用逗号分隔它们。
    【解决方案2】:

    这是因为 Jquery 将 name 或 id 视为唯一的。这就是为什么您的 javascript 函数只读取第一个按钮的原因。

    解决方案:

    为 4 个按钮使用通用类名。 (1)

    然后更改您的 jquery 代码:

     $(document).ready(function() {  
         $('a.sessionclass').click(function(e) {
             session = $(this).attr('id');    
             $.post('sessions.php', {session:session}
             );              
        });
    });
    

    现在您的 php 会话应该在点击时设置适当的按钮值。

    我同意@Lim H。按照他的建议更改您的 php 代码。

    【讨论】:

    • 是的,这也是个问题。所以 OP 需要结合 OMG 的建议和我的解决方案。
    • OMG 有正确的答案,并且为了存储会话,您不需要额外的 php 脚本。只需在您的 jQuery 脚本中使用 $.sessionStorage( 'foo', {data:'bar'} );...+1
    • 尽管您的解决方案比初始代码更好,但这不是真的 jQuery 不会将名称视为唯一:jsfiddle.net/gZZCs
    • @roy-finley sessionStorageHTML5 功能。不利于兼容性。 @OMG:$('a[name=add]') 是正确的,因为 OP 使用 $(this) 来获取他们的 id
    • @lim-h 您可以在同一页面中以多种形式拥有相同元素的名称。完全合法...$('a[name=add]') 是对的 :)
    【解决方案3】:
    <?php
        session_start();
        $id = $_POST['session']);
        if(!isset($_SESSION['ids'])) {
            $_SESSION['ids']= array();         
        }
    
        $_SESSION['ids'][$id] = $_POST['session']';
    ?>
    

    每次发出 AJAX 请求时,您的会话 id 都会重新初始化,因此最后只剩下一个值。因此,您可能希望为会话 id 创建一个数组,并将每个新的 id 值插入到该数组中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 2015-09-30
      • 2014-02-08
      相关资源
      最近更新 更多