У меня есть простой пример сессий 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
session_start();
echo 'count=' . count($_SESSION['data']);
?>
Эхо в первом файле показывает 2, а предупреждение в функции успеха отображает "count = 2". Счастливые дни.
Проблема возникает в том случае, если я меняю массив для объекта класса:
Файл запроса:
<?php
session_start();
include('ajaxtest_class.php');
$_SESSION['obj'] = new TestClass('foo,bar');
echo count($_SESSION['obj']->dataList);
?>
<!-- HMTL AS ABOVE -->
Удаленный файл:
<?php
session_start();
echo 'count=' . count($_SESSION['obj']->dataList);
?>
Файл класса:
<?php
class TestClass {
var $dataList;
function TestClass($incoming) {
$this->dataList = explode(',',$incoming);
}
}
?>
Это все еще отображает 2 на первой странице, но предупреждение об успехе ajax возвращается "count = 0". Кто-нибудь может объяснить, почему это так?
Update1
Если я импортирую файл класса в удаленный файл, он все равно не будет работать, хотя я могу доказать, что класс загружен.
<?php
session_start();
include('ajaxtest_class.php');
$c = new TestClass('a,b,c');
echo 'count=' . count($_SESSION['obj']->dataList) . '-' . count($c->dataList);
?>
Новое предупреждение об успешном использовании AJAX читается как count=0-3
.
Update2
var_dump ($ _ SESSION [ 'OBJ']);
object(__PHP_Incomplete_Class)#8 (2) {
["__PHP_Incomplete_Class_Name"]=>
string(9) "TestClass"
["dataList"]=>
array(2) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
}
}