1

我想出了如何使用 XMLHttpRequest API 将服务器上的本地 .TXT 文件读入 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是唯一的方法吗?

提前致谢,

-戴夫

编辑:@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

您可能可以将 apache 配置为接受 PUT 请求,然后使用 XMLHttpRequest 发送一个(我会用它jQuery.ajax()来抽象它)。

不过,最好让 PHP(或其他服务器端语言)为您处理它,因为仅使用 Apache 来控制身份验证会很困难。

于 2013-10-07T13:17:03.063 回答