我可以使用XMLHttpRequest写入文件吗?

时间:2018-01-04 13:46:34

标签: javascript ajax

我正在使用XMLHttpRequest来读取文件。

我可以使用XMLHttpRequest或任何其他javascript方法写入文件吗?我该怎么做?

目前在我的应用程序中,我正在使用PHP来实现此目的,但我不需要使用它。

function readTextFile(path, callback) {
  return new Promise(function(resolve, reject) {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
      if (xhr.readyState == 4) {
        if (xhr.status == 200) {
          resolve(xhr.responseXML);
        } else {
          reject(xhr);
        }
      }
    };
    xhr.open("GET", path);
    xhr.send();
  });
}
$(document).ready(function() {
  readTextFile("device.xml")
    .then(function(fileData) {
      // Use the file data
    })
    .catch(function(xhr) {
      // The call failed, look at `xhr` for details
    });
});

5 个答案:

答案 0 :(得分:2)

浏览器中的JavaScript无法写入文件。至少没有任何有用的方式,或跨平台。 Chrome在浏览器中有一个文件系统API,但它不是官方支持的,也不会是。

https://www.html5rocks.com/en/tutorials/file/filesystem/

XMLHttpRequest是只读的,所以说。顾名思义,这是一个请求。

但是,您可以向运行PHP或NodeJ的后端服务器发送XMLHttpRequest,该服务器可以写入文件。

如果您不喜欢PHP并且更喜欢JavaScript,那么NodeJs很不错。

NodeJS示例:

fs.writeFile('message.txt', 'Hello Node.js', (err) => {
  if (err) throw err;
  console.log('The file has been saved!');
});

https://nodejs.org/docs/latest/api/fs.html

答案 1 :(得分:1)

您可以使用XMLHttpRequest发出HTTP请求。

如果要写入文件,则需要设置服务器以识别某些类型的请求应该导致数据写入文件。

这通常需要使用服务器端编程语言,例如PHP(您已拒绝)。

您还可以查看WebDav,其中至少有一个JavaScript library包含XMLHttpRequest。

答案 2 :(得分:1)

  

我可以使用XMLHttpRequest或任何其他javascript方法写入文件吗?我该怎么做?

不,你不能! JavaScript是客户端编程语言,这意味着它无法编辑其他计算机或服务器上的文件。

你需要服务器和服务器端编程语言,比如PHP或其他任何因为它真的是服务器写入文件而不是你 - 你只是要求它这样做。

答案 3 :(得分:1)

当您对Web服务器使用简单的HTTP方法(如纯GET)时,服务器会为您提供文件 - 没有问题。

现在,当您想要将数据写入服务器时,您必须告诉服务器您要将一些数据写入文件系统。您必须使用PHP,NodeJs等在Web服务器中创建应用程序来处理此类请求并将数据作为文件写入文件系统。

只要您的服务器使用标准HTTP进行通信,就无法使用此方法。

答案 4 :(得分:1)

<块引用>

您好,如果您只想使用 js 并使用它编写文件,则是 可能,但您需要一个服务器代码(在 Node.Js 中制作)。所以这里是 代码:

服务器 [main.js]

var http = require('http');
var util = require('util');
var querystring = require('querystring');
var fs = require('fs');
var filename = 'your_file.txt';
var port = '80';



var server = http.createServer(function(req, res) {
    res.writeHead(200, {
        'Content-Type': 'text/html'
    });
    if (req.method == 'GET') {
        res.write(fs.readFileSync('index.html', 'utf8'));
        res.end();
    } else {

        var chunk = '';
        req.on('data', function(data) {
            chunk += data;
        });
        req.on('end', function() {
            console.log(chunk);
            fs.readFile(filename, 'utf-8', function(err, data) {

                if (!err) {
                    fs.writeFile(filename, data + '\n' + chunk, (err) => {
                        if (err) {
                            throw err;
                        }
                    });
                } else {
                    throw err;
                }
            });
            //any function to perform on clint side webpage.
            res.end();
        });

    }
}).listen(port);
console.log('Successfully started serving at : ' + port);

客户端网页 [index.html]

<!DOCTYPE html>
<html>
<body>

<button onclick="check()">Send!</button>
<input type="text" placeholder="enter some message here">

<script>
function check() {
  var xhttp;
  if (window.XMLHttpRequest) {
    // code for modern browsers
    xhttp = new XMLHttpRequest();
  } else {
    // code for IE6, IE5
    xhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  xhttp.open("post", "#", true);
  xhttp.send(document.querySelector('input').value);
}
</script>

</body>
</html>

  • 所有文件都是 uploaded
  • 注意: 请确保您的文件夹中已经有要写入的文件。
  • 用法: node main.js.