1

サーバー上のローカル .TXT ファイルを XMLHttpRequest API を使用して JS に読み込む方法を見つけましたが、私の人生ではファイルに書き込むことができません。それは可能ですか、それともファイルを読み込むためだけですか?

読み込む私のコードは正常に動作します:

var fReader = new XMLHttpRequest();

fReader.onreadystatechange=function() {
  if(fReader.readyState==4 && fReader.status==200) {
    parseText(fReader.responseText);//Processes the file.
}}
fReader.open("GET",fFileLoc,true);
fReader.send();

現在、PHP を使用してファイルに書き込みを行っていますが、理想からはほど遠いものです。私たちJSにぜひやってもらいたいです。何かご意見は?これを行う別のアプローチはありますか?PHPは唯一の方法ですか?

前もって感謝します、

-デイブ

EDIT: @rjmunro +others: PHP を使用することが、これを行うためのより良い方法であることがわかりました...私の修正されたコードは次のとおりです。(C&C 歓迎)。

JS:

var fReader = XMLHttpRequest();
//var params = "MODE=GET&File=Data.txt";//To read
//var params = "MODE=POST&File=Data.txt&Message=" + myMessage;//To write

    fReader.onreadystatechange=function() {
        if(fReader.readyState==4 && fReader.status==200) {
            //Not really any response text if writing...
            parseText(JSON.parse(fReader.responseText).GET);
        }
    }

    fReader.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    fReader.setRequestHeader("Content-length", params.length);
    fReader.setRequestHeader("Connection", "close");

    fReader.send(params);

PHP

$MODE = $_POST['MODE'];
switch($MODE) {
    case('GET'):
      #Read in file and process, then return output.
      $return['GET'] = file($_POST['File']);
    break;

    case('POST'):
        if(file_exists($_POST['File'])){
            $file = fopen($_POST['File'],"a");

            $data = $_POST["Message"];

            fwrite($file,$data);
            fclose($file);
        }
    #$return['POST'] = "some message?";
    break;
}
echo json_encode($return);

このソリューションで私が 100% 同意していない唯一のことは、なぜ setRequestHeader を設定する必要があるのか​​ということです。Chromeは実際にはこれを気に入っていないようです...別の投稿からコードを引っ張ってきました。

4

2 に答える 2

1

XMLHttpRequest を使用すると、HTTP リクエストを作成できます。

ファイルへの書き込みに使用する場合、HTTP サーバーはファイルを書き込むことによって要求に応答する必要があります。

これを行うには、PUT 動詞を使用できます(これを許可するように HTTP サーバーを構成する必要があることに注意してください。デフォルトでは、任意のユーザーがサーバーのディスクにファイルを書き込むことを HTTP サーバーは許可しません)。

POST または別の要求タイプを使用してデータを渡すこともできます。

PHPは唯一の方法ですか?

サーバー上では好きなプログラミング言語を使用できます (サーバーがサポートする言語に依存します。たとえば、C# を使用する場合は、ほぼ確実に IIS と ASP.NET を備えた Windows サーバーが必要です)。JavaScript を使用したい場合、多くのオプションがありますが、現時点ではNode.jsが他のものよりもはるかに人気があります。

于 2013-10-07T13:18:03.537 に答える
0

PUT リクエストを受け入れるように apache を設定してから、XMLHttpRequest を使用して送信することができます (jQuery.ajax()これを抽象化するために使用します)。

ただし、Apache のみを使用して認証を制御するのは難しいため、PHP (または別のサーバー側言語) で処理する方がよいでしょう。

于 2013-10-07T13:17:03.063 に答える