我正在做一个简单的 Ajax 练习,我将查询、Ajax 和 Ajax 调用的 url 分开。简而言之,我在一个页面中运行查询并将结果数组附加到$_SESSION
,然后显示一些 html 并且 Ajax 代码调用第三页通过附加到超全局的计数器从数组中一一获取元素$_GET
。这三个文件由require_once()
.
最初加载页面时,一切都按预期进行。$_SESSION
包含从 MySQL 中提取的整个数组,并且为$_GET
null。
一旦我单击按钮执行 Ajax 代码,$_GET
值就会改变并接收计数器的值,正如预期的那样。
然而,$_SESSION
不复存在。 现在var_dump
返回null
,我得到一个错误Notice: Undefined variable: _SESSION in C:\wamp\www\.....\ajax.php
。我不明白为什么会这样。
这是我的代码。首先,index.php
:
<?php
session_start();
$dbhost = "localhost";
$dbuser = "admin";
$dbpass = "XXXXXXX";
$dbname = "test";
mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname) or die(mysql_error());
$query = "SELECT ae_name FROM ajax_example";
$qry_result = mysql_query($query) or die(mysql_error());
$result;
while($row = mysql_fetch_array($qry_result,MYSQL_ASSOC)){
$result[]=$row;
}
$_SESSION['array']=$result;
require_once ("viewUsers.php");
require_once ("ajax.php");
?>
然后是 html 和 ajax 代码viewUsers.php
:
<html>
<body>
<script type="text/javascript">
<!--
function createRequest() {
try {
request = new XMLHttpRequest();
} catch (tryMS) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (otherMS) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = null;
}
}
}
return request;
}
var indx=0;
function calcIndex(){
return indx++;
}
function ajax(){
ajaxRequest = createRequest();
var index=calcIndex();
var url="ajax.php?index=" + index;
ajaxRequest.open("GET",url, true);
ajaxRequest.onreadystatechange = display;
ajaxRequest.send(null);
}
function display(){
if(ajaxRequest.readyState == 4){
var ajaxDisplay = document.getElementById('ajaxDiv');
ajaxDisplay.innerHTML = ajaxRequest.responseText;
}
}
//-->
</script>
<form name='myForm'>
<input type='button' onclick='ajax()' value='Show next name' />
</form>
<div id='ajaxDiv'>Your result will be displayed here</div>
</body>
</html>
然后 PHP 从 $_SESSION 接收数组并(应该)根据 $_GET['index'] 的值返回下一项。该文件是ajax.php
.
<?php
var_dump('Get value in ajax.php',$_GET); // The values are as expected
var_dump('Session value in ajax.php',$_SESSION); // This global cease to exist after I click the button
if(isset($_SESSION['array'])){
$array=$_SESSION['array'];
$cnt=count($array);
$index=null;
if(isset($_GET['index'])){
$index=$_GET['index'];
if($index>=$cnt){
$str="And that's it....";
}else{
$str="The next name is ".$array[$index]['ae_name'];
}
echo $str;
}
}
?>