2

次のように、チャットルームを更新する 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");
}
4

1 に答える 1