使用XMLHttpRequest在JS中写入文件?

时间:2013-10-07 13:13:48

标签: javascript php xmlhttprequest

我想出了如何使用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是唯一的方法吗?

提前致谢,

-Dave

编辑:@rjmunro +其他人:我发现使用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实际上似乎不喜欢这样......我从其他帖子中删除了代码。

2 个答案:

答案 0 :(得分:1)

XMLHttpRequest允许您发出HTTP请求。

如果要使用它来写入文件,则HTTP服务器必须通过编写文件来响应请求。

您可以使用the PUT verb执行此操作(请注意,您必须configure HTTP服务器允许此操作,默认情况下,任何HTTP服务器都不允许任意用户将文件写入服务器的磁盘)

您也可以使用POST或其他请求类型传递数据。

  

PHP是唯一的方法吗?

您可以在服务器上使用您喜欢的任何编程语言(取决于服务器支持的内容,例如,如果您想使用C#,那么您几乎肯定需要具有IIS和ASP.NET的Windows服务器)。如果你想使用JavaScript那么many options,其中Node.js比其他人明显更受欢迎。

答案 1 :(得分:0)

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

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