重新加载页面后无法看到我的会话数组列表

时间:2013-05-22 11:06:28

标签: php session

我有一个php会话数组和ajax请求,通过java脚本将捕获的数据添加到div。一切正常,除非我刷新页面数据消失,直到我添加下一个项目全部再次显示。我该如何解决这个问题?

文件1(test.php):

<?php
session_start();
?>

<!DOCTYPE html>
<html>
<head>
<script>
function loadXMLDoc()
{
var xmlhttp;
var myname = document.getElementById("firstname").value;
if(window.XMLHttpRequest){
    xmlhttp = new XMLHttpRequest();
    }
else
    {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
xmlhttp.onreadystatechange=function()
    {
    if(xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
    }
xmlhttp.open("POST", "test2.php", true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("firstname="+myname);
}
</script>

</head>

<body>

<h1>Enter Your Name</h1>
<input id="firstname"> </input>
<button type="button" onclick="loadXMLDoc()"> Add Item </button>
<div  id="myDiv"></div>

</body>
</html>

文件2(test2.php):

<?php

session_start();

$myitems = array();
if (!isset($_SESSION['item'])) $_SESSION['item']=$myitems;
if (isset($_POST['firstname']) && !empty($_POST['firstname'])) {
    $data = $_POST['firstname'];
    $_SESSION['item'][] = $data;
}

//echo '<pre>';
//print_r($_SESSION);
//echo '</pre>';

foreach ($_SESSION['item'] as $key=>$value){
echo "<h2>".$value."</h2>";
}
?>

2 个答案:

答案 0 :(得分:0)

  

一切正常,除非我刷新页面数据消失,直到我添加下一个项目全部再次显示。

为什么你期待不同的行为?即使您的会话中已经拥有项目 - 您也不是在test.php中的任何位置输出,那么您希望如何在那里看到它们?

将代码添加到循环遍历会话中的项目的文件中,并在div中输出所需的HTML代码。


顺便说一句,这完全是多余的,

$myitems = array();
if (!isset($_SESSION['item'])) $_SESSION['item']=$myitems;

如果会话已启动,$ _SESSION已经是一个数组。如果在为它们赋值之前初始化“欠阵列”,PHP并不在意。所以,即使是完全空的会议,

$_SESSION['item'][] = $data;

没有$_SESSION['item']的任何进一步初始化将在没有任何PHP投诉的情况下正常工作。

答案 1 :(得分:0)

修改页面test1.php ..当您刷新页面时,div元素的附加数据将丢失。这是预料之中的。     

<!DOCTYPE html>
<html>
<head>
<script>
function loadXMLDoc()
{
var xmlhttp;
var myname = document.getElementById("firstname").value;
if(window.XMLHttpRequest){
    xmlhttp = new XMLHttpRequest();
    }
else
    {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
xmlhttp.onreadystatechange=function()
    {
    if(xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
    }
xmlhttp.open("POST", "test2.php", true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("firstname="+myname);
}
</script>

</head>

<body>

<h1>Enter Your Name</h1>
<input id="firstname"> </input>
<button type="button" onclick="loadXMLDoc()"> Add Item </button>
<div  id="myDiv">
<?php 
if(isset($_SESSION['item'])){
echo "<pre>";
print_r($_SESSION['item']);
echo "</pre>";
}
?>
</div>

</body>
</html>