我的页面上有一个评论板,我根据用户在 changeTopic() 函数中使用 XMLHttpRequest 所在的页面加载不同的主题。我最初在提交表单 php 的末尾有这个:
header('Location: http://' . $_SERVER['HTTP_HOST'] . $_POST['page']);
问题是我不想刷新整个页面,只刷新包含消息的 DIV。我尝试通过将其插入带有 echo 的脚本标签中来运行 changeTopic() 函数。一方面,我无法获得 .$_GET['topic']。即使我首先创建了一个变量,也在 echo 内部工作,但我也尝试通过硬插入具有以下结果的可能值之一来运行该函数:
1)当消息部分正确刷新时,我丢失了表单,因为它包含在 index.html 中,而我只从带有查询字符串的外部 gettopic.php 加载消息。
2)我得到了一个奇怪的结果,我丢失了一个完全加载到完全不同的 div 中的外部文件。该文件更改了主页的哈希值,每次刷新都会检查该哈希值,并根据哈希值加载正确的文件,因此使用整个页面刷新不会导致这种情况。
// 编辑
function changeTopic(topic) {
if (topic=="") {
document.getElementById("messagelist").innerHTML="";
return;
}
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
}
else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("messagelist").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST", "gettopic.php?t="+topic,true);
xmlhttp.send();
}
我页面上的主要应用程序是我用 RaphaelJS 完成的 SVG 地图。用户可以从此 SVG 地图将信息页面加载到另一个 div 'info' 中。这些页面加载了一个类似的功能,除了更改#hash 并运行changeTopic() 来更改留言板,因此人们可以就每个主题进行对话。
PHP 表单获取正常填写的信息以及用户正在浏览的当前页面设置的隐藏“pageid”,并将其发送到数据库。不同的消息按此 pageid 排序,因此 changeTopic() 函数只带来正确的消息:gettopic.php?t=topic ('pageid')。
提交表单后,我只想刷新消息部分并清除表单。目前,它要么是整个页面刷新(用户失去了他们在 SVG 地图上的位置),要么是我丢失表单的部分刷新(取而代之的是一个空白点)并且那个奇怪的信息页面丢失了。