如何使用 JavaScript 从服务器读取文本文件?

IT技术 javascript ajax file-io
2021-02-01 14:44:50

在服务器上,有一个文本文件。在客户端使用 JavaScript,我希望能够读取此文件并对其进行处理。无法更改服务器上文件的格式。

如何将文件的内容放入 JavaScript 变量中,以便进行此处理?文件的大小可以高达 3.5 MB,但可以很容易地以 100 行(1 行是 50-100 个字符)的块进行处理。

文件的任何内容都不应该对用户可见;他会看到文件中数据的处理结果。

6个回答

您可以使用隐藏框架,在其中加载文件并解析其内容。

HTML:

<iframe id="frmFile" src="test.txt" onload="LoadFile();" style="display: none;"></iframe>

JavaScript:

<script type="text/javascript">
function LoadFile() {
    var oFrame = document.getElementById("frmFile");
    var strRawContents = oFrame.contentWindow.document.body.childNodes[0].innerHTML;
    while (strRawContents.indexOf("\r") >= 0)
        strRawContents = strRawContents.replace("\r", "");
    var arrLines = strRawContents.split("\n");
    alert("File " + oFrame.src + " has " + arrLines.length + " lines");
    for (var i = 0; i < arrLines.length; i++) {
        var curLine = arrLines[i];
        alert("Line #" + (i + 1) + " is: '" + curLine + "'");
    }
}
</script>

注意:为了使其在 Chrome 浏览器中工作,您应该使用--allow-file-access-from-files标志启动它信用

绝招!我想我会发疯,试图从同一个服务器目录加载一个简单的小文本文件。
2021-03-16 14:44:50
对于必须从文件系统加载文件的特殊情况(您的 html 不是由网络服务器提供的,而是直接从文件系统提供的),您可能会遇到 iframe 问题,请参阅stackoverflow.com/a/20379650/998938至少我是为 Chrome 做的。对于 Firefox,它有效。
2021-03-17 14:44:50
谢谢,从那以后我也爱上了 jQuery,但无论如何这个技巧是有效的。:)
2021-03-21 14:44:50
@rwitzel 虽然是真的,但这里的问题显然是关于从服务器读取,这通常意味着实际的 Web 服务器。
2021-03-29 14:44:50
要在 Chrome 中加载 file:/// URL,我必须使用以下命令启动 Chrome --allow-file-access-from-files
2021-04-07 14:44:50

加载那个巨大的数据块并不是一个很好的计划,但如果你必须这样做,这里是你可以如何使用jQuery$.ajax()函数来完成它的大纲

<html><head>
<script src="jquery.js"></script>
<script>
getTxt = function (){

  $.ajax({
    url:'text.txt',
    success: function (data){
      //parse your data here
      //you can split into lines using data.split('\n') 
      //an use regex functions to effectively parse it
    }
  });
}
</script>
</head><body>
  <button type="button" id="btnGetTxt" onclick="getTxt()">Get Text</button>
</body></html>

您需要使用 Ajax,它基本上是向服务器发送请求,然后获取一个 JSON 对象,然后将其转换为 JavaScript 对象。

检查这个:

http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_first

如果您使用的是 jQuery 库,它会更容易:

http://api.jquery.com/jQuery.ajax/

话虽如此,我强烈建议您不要将 3.5MB 的文件下载到 JS 中!这不是一个好主意。在您的服务器上进行处理,然后在处理后返回数据。然后如果你想得到一个新的数据,发送一个新的 Ajax 请求,在服务器上处理这个请求,然后返回新的数据。

希望有帮助。

是的,Ajax 是一种技术而不是一种语言,所以我的答案仍然是只使用 JavaScript :-)
2021-03-15 14:44:50
OP 似乎用 javascript说过:)
2021-03-23 14:44:50
哦,我理解你,但我认为这不是 OP 想要的。如何在不连接的情况下从服务器获取文件?
2021-04-05 14:44:50
我在哪里说它是一种语言,但对于 ajax,您仍然需要服务器端语言:)
2021-04-09 14:44:50
@Sarfraz:对于 Ajax,您肯定不需要服务器端语言!Ajax傻了 它只加载一个文本文件。如果您有一些不是纯文本文件的内容,那么您需要一种服务器端语言将其转换为 JSON 或 XML 或逗号分隔文本或简单字符串等形式的纯文本。 但是由于 OP 确实有一个文本文件然后他需要做的就是确保他可以从他的网络服务器访问它。尽管如此,加载 3.5 MB 的文件并不是一个好主意。
2021-04-10 14:44:50

我使用了 Rafid 的使用 AJAX 的建议。

这对我有用:

var url = "http://www.example.com/file.json";

var jsonFile = new XMLHttpRequest();
    jsonFile.open("GET",url,true);
    jsonFile.send();

    jsonFile.onreadystatechange = function() {
        if (jsonFile.readyState== 4 && jsonFile.status == 200) {
            document.getElementById("id-of-element").innerHTML = jsonFile.responseText;
        }
     }

我基本上(几乎是字面意思)从http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_get2复制了这段代码,所以一切都归功于他们。

我对它的工作原理知之甚少,但您不必知道您的制动器如何工作才能使用它们;)

希望这可以帮助!

看起来XMLHttpRequest已经被Fetch API取代了谷歌发布了一个很好的介绍,包括这个例子做你想做的事:

fetch('./api/some.json')
  .then(
    function(response) {
      if (response.status !== 200) {
        console.log('Looks like there was a problem. Status Code: ' +
          response.status);
        return;
      }

      // Examine the text in the response
      response.json().then(function(data) {
        console.log(data);
      });
    }
  )
  .catch(function(err) {
    console.log('Fetch Error :-S', err);
  });

但是,您可能想要调用response.text()而不是response.json().