Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript从服务器读取文本文件?_Javascript_Ajax_File Io - Fatal编程技术网

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

如何使用JavaScript从服务器读取文本文件?,javascript,ajax,file-io,Javascript,Ajax,File Io,在服务器上,有一个文本文件。在客户端使用JavaScript,我希望能够读取并处理该文件。无法更改服务器上文件的格式 如何将文件内容转换为JavaScript变量,以便进行此处理?文件的大小可以高达3.5MB,但它可以很容易地分块处理,比如说,100行(1行是50-100个字符) 用户不应看到文件的任何内容;他将看到文件中数据处理的结果。您需要使用Ajax,它基本上是向服务器发送请求,然后获取JSON对象,然后将其转换为JavaScript对象 选中此项: 如果您使用的是jQuery库,则更容

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

如何将文件内容转换为JavaScript变量,以便进行此处理?文件的大小可以高达3.5MB,但它可以很容易地分块处理,比如说,100行(1行是50-100个字符)


用户不应看到文件的任何内容;他将看到文件中数据处理的结果。

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

选中此项:

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

说到这里,我强烈建议你不要将3.5MB的文件下载到JS中!这不是一个好主意。在服务器上进行处理,然后在处理后返回数据。然后,如果您想要获取新数据,发送一个新的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>

getText=函数(){
$.ajax({
url:'text.txt',
成功:功能(数据){
//在这里解析数据
//您可以使用data.split('\n')拆分为行
//可以使用正则表达式函数来有效地解析它
}
});
}
获取文本

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

HTML:


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>

函数LoadFile(){
var of name=document.getElementById(“frmFile”);
var strawcontents=of name.contentWindow.document.body.childNodes[0]。innerHTML;
while(strRawContents.indexOf(“\r”)>=0)
strarwcontents=strarwcontents.replace(“\r”,”);
var arrLines=strawcontents.split(“\n”);
警报(“文件“+oFrame.src+”有“+arrLines.length+”行”);
对于(变量i=0;i

注意:为了在Chrome浏览器中工作,您应该以--allow file access from files标志开始

我真的认为你这样做是错误的。试图下载并解析一个+3Mb的文本文件是完全疯狂的。为什么不在服务器端解析文件,将结果以ORM的形式存储到数据库(您可以选择SQL,但它也取决于内容键值数据在CouchDB之类的平台上工作得更好),然后在客户端使用ajax解析数据


另外,如果可能的话,最好完全跳过文本文件以获得更好的性能。

我使用了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;
        }
     }
我基本上(几乎是字面上)从so复制了这段代码,这一切都归功于他们

我不太了解这是如何工作的,但你不必知道刹车是如何工作的来使用它们;)


希望这有帮助

您需要检查状态0(就像使用XMLHttpRequest在本地加载文件时一样,您不会获得状态,如果它是从web服务器返回的状态)

要读取设备文件,请使用以下命令:

readTextFile("file:///C:/your/path/to/file.txt");
要从服务器读取文件,请使用:

readTextFile("http://test/file.txt");

看起来
XMLHttpRequest
已被替换为。谷歌发布了一个很好的例子,其中包括“做你想做的事”:

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()

只是一个小问题,我看到了一些使用innerhtml的答案。我曾尝试过一个类似的想法,但决定不要太多,在最新版本中,同样的过程现在被称为危险的InnerHTML,因为你通过在应用程序中呈现html,为你的客户端提供了进入操作系统的途径。这可能会导致各种攻击以及SQL注入尝试

OP似乎只对javascript说:)是的,Ajax是一种技术而不是一种语言,所以我的答案仍然是只使用javascript:-)我在哪里说过它是一种语言,但对于Ajax,您仍然需要服务器端语言:)哦,我理解您,但我不认为这是OP想要的。如果不连接到服务器,您如何从服务器获取文件?@Sarfraz:对于Ajax,您肯定不需要服务器端语言!Ajax是愚蠢的。它只加载一个文本文件。如果您有非纯文本文件,则需要服务器端语言将其转换为JSON或XML、逗号分隔文本或简单字符串等形式的纯文本。但由于OP确实有一个文本文件,因此他需要做的就是确保他可以从web服务器访问该文件。不过,加载一个3.5MB的文件并不是一个好主意。这是个绝妙的把戏!我想从同一个服务器目录加载一个简单的小文本文件会让我发疯。谢谢,从那以后我也爱上了jQuery,但这个技巧无论如何都是有效的。:)对于必须从文件系统加载文件的特殊情况(您的html不是由Web服务器提供的,而是直接从文件系统提供的),您可能会遇到iFrame问题,请参阅。至少我为Chrome做了。对于Firefox来说,它起作用了。@rwizel虽然是真的,但这里的问题显然是关于从服务器读取的,这通常意味着实际的web服务器。对于要在Chrome中加载的文件:///URL,我必须用
-允许从文件访问文件
启动Chrome,我在解析这个答案中的第一段时遇到了很多麻烦,但我想我明白了要点。请注意,提问者说“服务器上的文件格式无法更改”。这就是问题的有趣之处。如果您将问题改为允许使用一系列服务器端技术,那么它就不再是一个有趣的问题,您的答案(也不有趣)是众多潜在解决方案中的一个。AJAX可以读取私有服务器文件,还是一个
readTextFile("http://test/file.txt");
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);
  });