私のページにはコメントボードがあり、changeTopic()関数のXMLHttpRequestを使用して、ユーザーが表示しているページに応じてさまざまなトピックをロードします。私は元々、送信フォームphpの最後にこれを持っていました:
header('Location: http://' . $_SERVER['HTTP_HOST'] . $_POST['page']);
問題は、ページ全体を更新したくないということです。メッセージを含むDIVのみを更新します。changeTopic()関数を、echoを使用してスクリプトタグ内に挿入して実行してみました。1つは、。$ _GET['topic']を取得できませんでした。最初に変数を作成した場合でもecho内で作業しましたが、可能な値の1つをハード挿入して関数を実行しようとすると、次の結果が得られました。
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」を取得して、データベースに送信します。さまざまなメッセージはこのページIDでソートされるため、changeTopic()関数は正しいメッセージのみを取得します:gettopic.php?t = topic('pageid')。
フォームを送信した後、メッセージ部分のみを更新し、フォームをクリアしてください。現時点では、ページ全体を更新する(ユーザーがSVGマップ上の位置を失う)か、フォームを失い(代わりに空白の場所を取得する)部分的に更新し、その奇妙な情報ページが欠落しています。