changeTopic()関数でXMLHttpRequestを使用しているページに応じて異なるトピックをロードするコメントボードがページにあります。投稿フォームの後にPHPを介してDIVを1つだけリフレッシュする
header('Location: http://' . $_SERVER['HTTP_HOST'] . $_POST['page']);
問題はメッセージが含まれている唯一のDIV、私は、ページ全体をリフレッシュしたくないということです:私はもともと私の提出したフォーム、PHPの終わりにこれを持っていました。私はechoを使ってscriptタグの中に挿入してchangeTopic()関数を実行しようとしました。 1つは、私は得ることができませんでした。$ _ [トピック]。最初に変数を作成してもエコーの内部で作業していましたが、次の結果で可能な値のうちの1つをハード挿入することによって関数を実行しようとしました:
1)メッセージセクションが正しくリフレッシュされましたが、それはindex.htmlに含まれているので、私は外部のgettopic.phpからクエリ文字列でメッセージを読み込みます。
2)完全に異なるdivにロードされた外部ファイルを失った奇妙な結果が得られました。このファイルは、メインページのハッシュを変更します。ハッシュに従って右側のファイルがロードされるため、ページ全体のリフレッシュを使用すると、この結果が得られませんでした。
// EDIT
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フォームは、ユーザーが閲覧している現在のページで設定された隠しページIDだけでなく、通常の入力情報を受け取り、データベースに送信します。異なるメッセージはこのpageidによってソートされるので、changeTopic()関数は適切なメッセージだけを取得します:gettopic.php?t = topic( 'pageid')。
フォームを送信した後、メッセージ部分のみをリフレッシュし、フォームをクリアすることをお勧めします。現時点では、ページ全体がリフレッシュされ(ユーザーがSVGマップ上の自分の位置を失う)、フォームを失う部分的なリフレッシュ(代わりに空白の場所を取得)とその奇妙な情報ページがありません。
あなたはこのために 'ajax'を使用しなければなりません – k102
btw ..私がgettopic.php?t = fooをクエリすると正確にエコーされるでしょうか? – walialu
messagelistはul要素で、gettopic.phpは各コメントをこのリストのliとして読み込みます。 –