sha*_*hat 2 php ajax session php4 class
我有一个简单的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>
Run Code Online (Sandbox Code Playgroud)
远程文件:
<?php
session_start();
echo 'count=' . count($_SESSION['data']);
?>
Run Code Online (Sandbox Code Playgroud)
第一个文件的回显显示为2,成功函数中的警报显示"count = 2".快乐的时光.
出现问题的地方是我将数组替换为类对象:
请求文件:
<?php
session_start();
include('ajaxtest_class.php');
$_SESSION['obj'] = new TestClass('foo,bar');
echo count($_SESSION['obj']->dataList);
?>
<!-- HMTL AS ABOVE -->
Run Code Online (Sandbox Code Playgroud)
远程文件:
<?php
session_start();
echo 'count=' . count($_SESSION['obj']->dataList);
?>
Run Code Online (Sandbox Code Playgroud)
班级档案:
<?php
class TestClass {
var $dataList;
function TestClass($incoming) {
$this->dataList = explode(',',$incoming);
}
}
?>
Run Code Online (Sandbox Code Playgroud)
这仍然在第一页上显示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);
?>
Run Code Online (Sandbox Code Playgroud)
来自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"
}
}
Run Code Online (Sandbox Code Playgroud)
您需要在remote_ajax文件中包含Class(之前session_start()):
编辑:序列化/反序列化要求是PHP4的限制.
请求文件:
<?php
include('ajaxtest_class.php');
session_start();
$_SESSION['obj'] = serialize(new TestClass('foo,bar'));
Run Code Online (Sandbox Code Playgroud)
远程文件:
<?php
session_start();
include('ajaxtest_class.php');
$obj = unserialize($_SESSION['obj']);
echo 'count=' . count($obj->dataList);
?>
Run Code Online (Sandbox Code Playgroud)
在PHP中,应该以不同的方式定义类构造函数:
<?php
class TestClass {
var $dataList;
function __construct($incoming) {
$this->dataList = explode(',',$incoming);
}
}
?>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1061 次 |
| 最近记录: |