【问题标题】:CSV-import via jquery - variable locked in通过 jquery 导入 CSV - 变量被锁定
【发布时间】:2013-11-09 10:44:09
【问题描述】:

我使用一个不错的代码来导入 csv 数据。 但是,我的变量似乎以某种方式被捕获在函数中,因此我无法从 .js 中的其他地方访问它...

在下面的代码中查看我的两个警报功能。

从帖子中复制的代码(How to read data From *.CSV file using javascript?

$(document).ready(function () {
    $.ajax({
        type: "GET",
        url: "../recipes.csv",
        dataType: "text",
        success: function (data) {
            processData(data);
        }
    });
});

function processData(allText) {
    var allTextLines = allText.split(/\r\n|\n/);
    var headers = allTextLines[0].split(',');
    var lines = [];

    for (var i = 0; i < allTextLines.length; i++) {
        var data = allTextLines[i].split(',');
        if (data.length == headers.length) {

            var tarr = [];
            for (var j = 0; j < headers.length; j++) {
                tarr.push(data[j]);
            }
            lines.push(tarr);
        }
    }
    dataArray = (lines + "").split(';');

    alert(dataArray[1]); // here it works
}
alert(dataArray[1]); // here it doesn't work: "ReferenceError: dataArray is not defined"

【问题讨论】:

    标签: javascript jquery ajax csv


    【解决方案1】:

    函数processData(...)使用的dataArray变量只存在于函数内部。

    为了在函数之外使用它,你需要声明它。例如:

    var dataArray = {};
    
    function processData(allText) {
        var allTextLines = allText.split(/\r\n|\n/);
        var headers = allTextLines[0].split(',');
        var lines = [];
    
        for (var i=0; i<allTextLines.length; i++) {
            var data = allTextLines[i].split(',');
            if (data.length == headers.length) {
                var tarr = [];
                for (var j=0; j<headers.length; j++) {
                    tarr.push(data[j]);
                }
                lines.push(tarr);
            }
        }
        dataArray = (lines + "").split(';');
    
        alert(dataArray[1]); 
    }
    
    $(document).ready(function () {
        $.ajax({
            type: "GET",
            url: "../recipes.csv",
            dataType: "text",
            success: function (data) {
                processData(data);
                alert(dataArray[1]); // here it will return the data from processData(...)
            }
        });
    });
    

    What is the scope of variables in JavaScript?。这是一个关于 JavaScript 变量作用域的有趣线程。

    【讨论】:

    • 如你所提出的,如何从processData函数中获取var dataArray = {};中处理后的数据?这仍然会为 dataArray 留下一个空对象。
    • 看@ OP:这是正确的评论,但仍将输出 undefined 因为在调用第一个警报之前 ajax 帖子尚未完成(*返回)
    • @MarvinSmit 在这点上是对的。为了清楚起见,我正在编辑我的代码 sn-p
    • 只是为了更好地理解。声明变量时还有一种向上级联的方法吗?喜欢写“.parent var dataArray = {}”?我有一个新案例,我根据导入的 csv 的标题行定义变量名称。因此,我不能在...之前硬编码变量名...
    猜你喜欢
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2019-05-26
    • 2012-02-11
    • 1970-01-01
    • 2017-09-29
    相关资源
    最近更新 更多