如何使用jQuery AJAX $.post存储PHP $_SESSION变量?

8

帮帮我!

我遇到了一些问题,无法使用AJAX。我有一个分页画廊,每个图像下面都有复选框。如果用户在页面之间移动,我需要将复选框的值存储在会话变量中,所以当用户随时提交表单时,它将包括所有页面上选中的值。

我正在使用以下jQuery代码:

$(document).ready(function() {
    $(".gal-nav").click(function() {
        $.post("form-data-holder.php", $("#gallery-form").serialize());
    });
});

并且form-data-holder.php文件的内容如下:
<?php

    $_SESSION['saved'] = "true";

    foreach ($_POST as $key=>$value ) {
        if ( $key !== "submit" ) {
            $value = htmlentities(stripslashes(strip_tags($value)));
            $_SESSION[$key] = $value;
        }
    }

?>

我有两个问题-- 1) 怎么从serialize()函数中获取复选框的值?我认为我需要通过value[]之类的方式来获取数组,然后将其存储为单独的会话变量——除非我可以将一个数组作为$_SESSION变量存储? 2) 在我处理任何问题之前,我将这行代码 $_SESSION['saved'] = "true"; 添加到php脚本中,然后在我的画廊页面上打印出$_SESSION键和值,以查看AJAX请求是否有效。但是并没有打印出那个$_SESSION['saved'],当我返回页面时它并没有被添加到已打印的$_SESSION变量列表中。 谢谢你的帮助!
1个回答

6
你需要在form-data-holder.php文件中调用session_start()。
每次你发起ajax调用时,都会从服务器请求一个新的/未知原始页面,该页面不知道在原始页面中设置的任何变量。

抱歉,会话已经开始,用户必须登录才能查看画廊。 - rhodesjason
是的,但当您进行ajax调用时,它会加载一个新的php页面,重新开始,因此您也需要在那里调用它。 - jeroen
嗯,我在form-data-holder.php文件的顶部添加了<?php session_start(); ?>,但没有任何变化。我是否需要以某种方式将该会话与其他会话关联起来? - rhodesjason
通常情况下,如果您没有以特殊方式使用会话名称或其他方式启动会话,就不会出现这种情况。您确定form-data-holder.php已经打开/找到了吗? - jeroen
1
您可以禁用错误显示并启用将错误记录到文件中。这对于实时代码来说几乎是必需的。 - John Dvorak
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接