我在我的頁面上有一個評論板,根據用戶使用XMLHttpRequest在changeTopic()函數中的頁面加載不同的主題。我本來這個在我提交表單的PHP的結尾:在提交表單後通過PHP刷新只有1個DIV
header('Location: http://' . $_SERVER['HTTP_HOST'] . $_POST['page']);
的問題是,我不想刷新整個頁面,只包含消息DIV。我嘗試通過在帶有echo的腳本標記中插入changeTopic()函數來運行它。首先,我無法得到。$ _ GET ['topic']。在回聲裏面工作,即使我首先做了一個變量,但我也嘗試了通過硬插入其中一個可能的值來得到以下結果:
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();
}
我的網頁上的主要應用是SVG地圖,我已經與RaphaelJS完成。用戶可以從這個SVG地圖加載信息頁到另一個div'info'。這些頁面加載了一個類似的函數,它還改變#hash並運行changeTopic()以更改留言板,以便人們可以就每個主題進行對話。
PHP表單採用正常的填充信息以及用戶正在瀏覽的當前頁面設置的隱藏'pageid',並將其發送到數據庫。不同的消息按這個pageid排序,所以changeTopic()函數只會帶來正確的消息:gettopic.php?t = topic('pageid')。
提交表單後,我只想要刷新消息並清除表單。目前它要麼整個頁面刷新(用戶放棄在SVG地圖上的位置),要麼在部分刷新的地方丟失表單(取而代之的是空白處)以及那個奇怪的信息頁面丟失。
你必須使用'ajax'作爲這個 – k102
btw ..當我查詢gettopic.php?t = foo時究竟會發生什麼echo'ed? – walialu
messagelist是一個ul元素,gettopic.php會在這個列表中加載每個註釋。 –