Javascript解析文本数据错误?

时间:2016-06-20 11:56:55

标签: javascript parsing filereader papaparse

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

未捕获的TypeError:无法执行' readAsText' on' FileReader':参数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>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:3)

  1. getElementsByName返回始终返回匹配元素的nodelist集合,因此基本上您只需选择第一个:x = document.getElementsByName("datafile")[0]

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

  3. 由于documentaion表示Papa.parse本身并未返回任何内容,因此您应提供回调以获取数据。因此,如果您使用

    之类的内容替换complete: undefined对象中的config
    complete: function(data) {
        console.log(data);
    }
    

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