在处理$_GET
,$_SESSION
和XMLHttpRequest
时,我需要一些帮助。我已经构建了一个最小的工作示例来说明问题:
的index.php
<?php
session_start();
$_SESSION['current'] = 2;
?>
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="ajax.js"></script>
</head>
<body>
<div id="content"><?php include('table.php'); ?></div>
</body>
</html>
table.php
<?php
if(isset($_GET['current']))
{
$_SESSION['current'] = $_GET['current'];
}
$current = $_SESSION['current'];
echo '<h1>Table Value = '.$current.'<br>';
?>
browse.php
<?php
if(isset($_GET['current']))
{
$_SESSION['current'] = $_GET['current'];
}
$current = $_SESSION['current'];
echo '<h1>Browse value = '.$current.'<br>';
print "<input type=\"button\" value=\"Click here\" onclick=\"myfunc($current)\"/> ";
?>
ajax.js
function myfunc(input) {
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET","table.php?current=" + (input+1),false);
xmlhttp.send();
document.getElementById("content").innerHTML=xmlhttp.responseText;
xmlhttp.open("GET","browse.php",false);
xmlhttp.send();
document.getElementById("target").innerHTML=xmlhttp.responseText;
}
我使用Firebug控制台来跟踪正在发生的事情。首先让我指出我将async参数设置为false,因为我的服务器请求非常小。当我单击按钮myfunc(2)
时,它会从服务器请求./table.php?current=3
和./browser.php
。
我的想法是,因为我首先请求./table.php?current=3
,所以会话变量$_SESSION['current']
将设置为3.但是当请求browse.php时,会话变量未设置!这是我单击按钮一次后发生的事情:
知道可能出错的是什么?在此先感谢:)
答案 0 :(得分:2)
您需要在 browser.php 的开头添加session_start();
。 (正如Marc B对你的问题的评论)。
如果您不确定哪个脚本已包含在另一个已启动会话的脚本中,您可以使用
if(!session_id()) session_start();
在每个PHP脚本的开头。
根据你的推理:
我将async参数设置为false,因为我的服务器请求太小了。
问题是网络通信可能会在很长一段时间内(或在某些情况下永久性地)冻结您的页面,无论响应的大小如何。