在AJAX操作期间重置PHP会话中的类对象?

在AJAX操作期间重置PHP会话中的类对象?,php,ajax,class,session,php4,Php,Ajax,Class,Session,Php4,我有一个PHP会话和AJAX的简单示例,它在会话中保存数组时起作用: 请求文件: <?php session_start(); $_SESSION['data'] = array('foo','bar'); echo count($_SESSION['data']); ?> <html> <head> <title>Test</title> <script type="text/javasc

我有一个PHP会话和AJAX的简单示例,它在会话中保存数组时起作用:

请求文件:

<?php
    session_start();
    $_SESSION['data'] = array('foo','bar');
    echo count($_SESSION['data']);
?>
<html>
<head>
    <title>Test</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
</head>
<body>
    <button id="but1">Go</button>
    <script type="text/javascript">
        $('#but1').click(function() {
            $.ajax({
                url:'ajaxtest_remote.php',
                success:function(result) {
                    alert(result);
                }
            });
        });
    </script>
</body>
</html>
<?php
include('ajaxtest_class.php');
session_start();
$_SESSION['obj'] = serialize(new TestClass('foo,bar'));

您需要在远程ajax文件中包含该类(在
会话\u start()之前)

编辑:序列化/非序列化要求是PHP4的一个限制

请求文件:

<?php
    session_start();
    $_SESSION['data'] = array('foo','bar');
    echo count($_SESSION['data']);
?>
<html>
<head>
    <title>Test</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
</head>
<body>
    <button id="but1">Go</button>
    <script type="text/javascript">
        $('#but1').click(function() {
            $.ajax({
                url:'ajaxtest_remote.php',
                success:function(result) {
                    alert(result);
                }
            });
        });
    </script>
</body>
</html>
<?php
include('ajaxtest_class.php');
session_start();
$_SESSION['obj'] = serialize(new TestClass('foo,bar'));

在PHP中,类构造函数的定义应该不同:

<?php
    class TestClass {
        var $dataList;
        function __construct($incoming) {
            $this->dataList = explode(',',$incoming);
        }
    }
?>


尝试使用
var\u dump
对其进行两次调试。你是用老php4吗?或者你为什么这样写你的课程。php5的方法是使用
函数uu构造($incoming)
我不经常尝试oop PHP,还是个新手!因此,我应该用
\u construct
?+1替换我的构造函数的名称。事实上,除非加载该类,否则它将是一个不完整的类,没有dataList属性。我已经完全按照上面的方法进行了调整,但仍然得到了
count=0
@shannethat,我发布了一个快速的故障排除步骤。。var_dump返回什么?谢谢,我已经用输出更新了问题。这是一个不完整的类,即使在导入类文件之后也是如此。我已经弄明白了。在调用会话_start()之前,必须包含类文件。我想这是有道理的。
<?php
    session_start();
    include('ajaxtest_class.php');
    $c = new TestClass('a,b,c');
    echo 'count=' . count($_SESSION['obj']->dataList) . '-' . count($c->dataList);
?>
object(__PHP_Incomplete_Class)#8 (2) {
    ["__PHP_Incomplete_Class_Name"]=>
    string(9) "TestClass"
    ["dataList"]=>
    array(2) {
        [0]=>
        string(3) "foo"
        [1]=>
        string(3) "bar"
    }
}
<?php
include('ajaxtest_class.php');
session_start();
$_SESSION['obj'] = serialize(new TestClass('foo,bar'));
<?php
    session_start();
    include('ajaxtest_class.php');
    $obj = unserialize($_SESSION['obj']);
    echo 'count=' . count($obj->dataList);
?>
<?php
    class TestClass {
        var $dataList;
        function __construct($incoming) {
            $this->dataList = explode(',',$incoming);
        }
    }
?>