-2

I have a php session array and ajax request to add captured data to a div via java script. All works fine except when I refresh the page the data disappears until I add the next item all shows up again. How can I fix this issue?

file 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>

file 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>";
}
?>
4

2 回答 2

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>
于 2013-05-22T11:58:50.847 回答
0

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

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

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


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

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

如果会话已启动,则 $_SESSION 已经是一个数组。PHP 并不关心你是否在给它们赋值之前初始化了“数组下”。所以即使有一个完全空的会话,

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

无需任何进一步的初始化就$_SESSION['item']可以正常工作,而不会受到 PHP 的任何投诉。

于 2013-05-22T11:51:25.073 回答