将Session变量从Ajax发送到PHP

时间:2013-01-16 02:11:06

标签: php jquery ajax session

我在页面上有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并将其发送到sessions.php

PHP:

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

只需创建会话。

我遇到的问题是PHP会话正在获取点击的第一个按钮的ID,这就是全部。如果单击另一个按钮,则Ajax会发布按钮ID,但会话仅保留单击第一个按钮的ID。

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

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

3 个答案:

答案 0 :(得分:2)

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

<强>解决方案:

对4个按钮使用公共类名称。 (&lt; a class =“sessionclass otherclasses”href =“#”&gt; 1&lt; / a&gt;)

然后更改你的jquery代码:

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

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

我同意@Lim H.改变你的PHP代码,就像他建议的那样。

答案 1 :(得分:2)

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'];
}

答案 2 :(得分:1)

<?php
    session_start();
    $id = $_POST['session']);
    if(!isset($_SESSION['ids'])) {
        $_SESSION['ids']= array();         
    }

    $_SESSION['ids'][$id] = $_POST['session']';
?>

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