Papaparse /文件不起作用 - 输出乱码

时间:2015-03-10 09:21:36

标签: javascript jquery csv papaparse

我发布了一个关于解析大型csv文件Jquery crashes while parsing large csv file的问题。它涉及读取csv文件并将其加以标记。我尝试使用其中一个响应中给出的代码,但它没有工作..

这是我的整个代码:

<!DOCTYPE html>
 <meta http-equiv="content-type" content="text/html;charset=utf-8" />
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="PapaParse-4.1.0/papaparse.js"></script>
<script src="virtual-list-master/vlist.js"></script>
<script>
$("#fUpload").bind("change", function(evt) {
    var bigFile = evt.target.files[0];
    var rows = [];

    Papa.parse(bigFile, {
        delimiter: ",",
        newline: "\n",
        header: false,
        dynamicTyping: false,
        worker: false,
        chunk: function(results) {
            rows = rows.concat(results.data);
        },
        complete: function() {
            var list = new VirtualList({
              h: 300,
              itemHeight: 30,
              totalRows: rows.length - 1,
              generatorFn: function(row) {
                  var el = document.createElement("tr");
                  var html = '';
                  html += '<td>' + row + '</td>';
                  for(var j = 0; j < rows[row].length; j++) {
                      html += '<td>' + rows[row][j] + '</td>';
                  }
                  el.innerHTML = html;
                  return el;
              }
            });

            document.getElementById('table').appendChild(list.container)
        }
    });
});
</script>

<input type="file" id="fUpload" />
<table style="width: 100%">
    <tbody id="table">
    </tbody>
</table>

我在当前工作目录中有Papaparse-4.1.0和virtual-list-master文件夹。但是当我在浏览器中打开它并上传一个csv文件时,下面没有打印任何表格。上传函数似乎没有任何缺陷,因为回答者显示了相同的小提琴演示;我只是在这里重复使用它。你可以在这里看到小提琴:http://jsfiddle.net/8e99j5v9/5/

有人可以告诉我为什么我的代码不起作用吗?

修改 我感谢Sergiu提出了一个可行的解决方案,但是交付的结果表已经彻底乱码了。行和列重叠如下 This is how my table looks

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

JavaScript代码按照它在HTML结构中出现的顺序进行解释/执行。它也将只能访问&#34; 之前的HTML 。因此,$("#fUpload")会尝试在#fUpload中找到ID为body的元素,但要考虑我之前所说的内容(内容的顺序是#34;加载/执行&#34 ;)它无法找到任何内容,因为<input type="file" id="fUpload" /> script标记之后

解决方案: 1)将<script>标记移动到head部分and the input and table in a正文section and move the $(&#34;#fUpload&#34;)。bind(... {{1 $(document).ready` callback。(Read about it here

2)将输入和表移到脚本标记上方。

为什么1会起作用?因为code in a。这告诉它里面的代码在加载完整个HTML(包括输入)之后执行