【问题标题】:Javascript parsing text data error?Javascript解析文本数据错误?
【发布时间】:2016-06-20 11:56:54
【问题描述】:

我正在尝试解析本地目录中的一些数据。 我使用 papa 解析器来做到这一点。 问题是我无法将文本文件分配给变量。我收到了这个错误;

未捕获的 TypeError:无法在“FileReader”上执行“readAsText”:参数 1 不是“Blob”类型。

我已经对其进行了搜索,发现这是使用 HTML 文件阅读器读取文件时非常常见的错误。

我的代码是;

<!doctype html>
<html class="no-js" lang="">
    <head>
        <script src="https://github.com/mholt/PapaParse/blob/master/papaparse.js"></script>
        <meta charset="utf-8">
        <meta http-equiv="x-ua-compatible" content="ie=edge">
        <title>Parse Example</title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="css/normalize.css">
        <link rel="stylesheet" href="css/main.css">
        <script src="js/vendor/modernizr-2.8.3.min.js"></script>
    </head>
    <p>Click the button to Upload .</p>
    <button onclick="myFunction()" type="INPUT">Load</button>
    <input type="file" name="datafile" size="40">
    <script>
        var x;
        var config = {
            delimiter: "",	// auto-detect
            newline: "",	// auto-detect
            header: true,
            dynamicTyping: false,
            preview: 0,
            encoding: "",
            worker: false,
            comments: false,
            step: undefined,
            complete: undefined,
            error: undefined,
            download: true,
            skipEmptyLines: false,
            chunk: undefined,
            fastMode: undefined,
            beforeFirstChunk: undefined,
            withCredentials: undefined
        };
        function myFunction() {
            x = document.getElementsByName("datafile");
            myfile =  Papa.parse(x, config);
            document.getElementById("demo").innerHTML = myfile;
        }
    </script>
    <p id="demo"></p>
    </body>
</html>

【问题讨论】:

    标签: javascript parsing filereader papaparse


    【解决方案1】:
    1. getElementsByName返回总是返回匹配元素的节点列表集合,所以基本上你可以选择第一个:x = document.getElementsByName("datafile")[0]

    2. Papa.parse 期望它的第一个参数是字符串或File 对象。 File 对象可以从FileList 中获取,该对象存储在文件输入的files 属性中。所以基本上(如果在输入中选择了文件,它应该可以工作): x = document.getElementsByName("datafile")[0].files[0]

    3. 正如documentaion 所说Papa.parse 本身不返回任何内容,您应该提供回调来获取数据。因此,如果您将 config 对象中的 complete: undefined 替换为类似

      complete: function(data) {
          console.log(data);
      }
      

      您将在浏览器控制台中显示您的数据。

    【讨论】:

    • 它已经奏效了,但是如果我一开始有更长的文档怎么办?我需要一个 for 循环来获取每一行吗?
    • 没听懂问题,你能解释一下吗?
    • 代码有效。但不是我想要的方式。我没有收到任何错误,我的数据也没有被读取。读取数据后,我得到一个空的类似数组的对象。我问是因为线结构吗?例如,我应该写一个像这样的循环; for i = 0 to line_lenght line(i) = x = document.getElementsByName("datafile")[i].files[i]
    • 我已经更新了答案:你必须使用回调来获取你的数据。前两个部分与行结构无关:第一部分只是获取你的 HTML 节点,你可以使用 @ 987654334@ 方法,它返回单个节点,第一个 [0] 可能会被丢弃。第二部分是关于从文件输入中获取文件对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2017-04-27
    • 2010-10-21
    • 2020-12-22
    • 2019-05-12
    相关资源
    最近更新 更多