在AJAX操作期间重置PHP会话中的类对象?
我有一个PHP会话和AJAX的简单示例,它在会话中保存数组时起作用: 请求文件:在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
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);
}
}
?>