次のように、チャットルームを更新する JavaScript 更新スクリプトがあります。
// Update chat rooms //
if(time > lastchatupdatetime + .4){
for(var i in this.chatroomlist){
var chattext = AJAX('server/updateChatRoom.php','id='+i);
document.getElementById("S3DChatRoom_" + i).innerHTML = chattext;
}
lastchatupdatetime = time;
}
AJAX 関数は次のようになります。
var AJAX = function (page, send, callback){
if(typeof callback == 'undefined') callback = function() {};
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
else { // for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function (){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
chatresponse = xmlhttp.responseText;
callback();
}
}
xmlhttp.open("POST",page,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(send);
return chatresponse;
}
PHP スクリプトは次のようになります。
$chatroomid = isset($_POST['id'])?$_POST['id']:0;
$chatroomdir = "../chatrooms/";
$chatroomurl = $chatroomdir . 'chatroom_' . $chatroomid . ".json";
if(file_exists($chatroomurl)){
$chattext = json_decode(file_get_contents($chatroomurl),TRUE);
if($chattext == TRUE){
foreach($chattext as $i){
echo $i[0] . ": " . $i[1] . "<br>";
}
}
} else {
echo "Chatroom listed does not exist";
}
新しいチャットテキストを送信した後、テキストが書き込まれ、最初の更新時に表示され、次の更新時に.json
チャットの内容を保持するファイルから削除されます。これは私にはまったく意味がありません。私は、この問題がリモートに存在していなくても、同様のチャット アプリケーションを作成しました。これは、WebMatrix の IIS-Express PHP と WAMP の PHP で発生します。
チャット送信 PHP スクリプトは次のとおりです (デバッグ コードがいくつか残っています。デバッグ コードは正常に動作し、すべての情報が正しく書き込まれています)。
$chatroomid = $_POST['id'];
$chatroomtext = $_POST['chattext'];
$clientid = $_POST['clientid'];
$chatroomdir = "../chatrooms/";
$chatroomurl = $chatroomdir . "chatroom_" . $chatroomid . ".json";
$currentchattext = file_get_contents($chatroomurl);
$currentchattext = json_decode($currentchattext, TRUE);
$currentchattext[] = array($clientid,$chatroomtext);
file_put_contents("debug2",json_encode($currentchattext));
$success = file_put_contents($chatroomurl, json_encode($currentchattext));
file_put_contents("debug",json_encode($currentchattext), FILE_APPEND);
if($success == FALSE){
echo 0;
} else {
echo 1;
}
投稿用の JavaScript は次のとおりです。
var submitChatTextconfirm;
document.getElementById("S3DTextInput_"+name).addEventListener("keypress",function(event) {
if(event.keyCode == 13){
submitChatTextconfirm = AJAX("server/submitChatText.php", "id=" + name + "&chattext=" + document.getElementById("S3DTextInput_"+name).value + "&clientid=" + this.clientid);
console.log(document.getElementById("S3DTextInput_"+name).value);
console.log(submitChatTextconfirm);
}
},true);
if(submitChatTextconfirm == 1){
console.log("Chat sent");
} else {
console.log("ERROR: Chat text failed to send");
}