无法在get函数之外访问var

时间:2013-10-02 20:07:26

标签: javascript

如何在javascript中保存数组中的信息,我从文本文件中检索以供以后使用?我正在使用它来放置一些HTML,但也对用户做出反应。截至目前,我可以使用内联函数调用放置HTML,但我希望以后使用这些数据......

function get_words() {
    var words = new Array();
    var sylls = new Array();
    var csv_file = new Array(); // for word arrays

    $.get('terms.csv', function(data){
        csv_file = data.split('\n');
        // csv file is now in an array, split into seperate word array and syllable array
        for (var i = 0; i < csv_file.length; i++) {
            var both = csv_file[i].split(',');  // split at the comma
            words[i] = both[0]; // populate word array
            sylls[i] = both[1]; // populate syllable array
            put_word(words[i], sylls[i]);
        };
        check_resize();
    });
}

function put_word(word, sylls) {
    console.log(word);
    // place the words into 'words' div
    var divID = document.getElementById("words");   // grab 'words' div
    divID.innerHTML += "<span>" + word + "</span>" + "<sup>" + sylls + "</sup> ";
}

这就是我的代码。如果在获取函数之外可以访问单词[]和sylls [],我会喜欢它。

编辑:让我更清楚(哎呀)。我在哪里声明我的数组并不重要。我知道这个的原因是因为我可以将它们放在脚本的顶部(在函数之外),在get_words()的末尾尝试console.log(单词),它将是一个空数组。

var words = new Array();
var sylls = new Array();
var csv_file = new Array(); // for word arrays

$(document).ready(function(){
    get_words();
});


function get_words() {


    $.get('terms.csv', function(data){
            csv_file = data.split('\n');
                // csv file is now in an array, split into seperate word array and syllable array
                for (var i = 0; i < csv_file.length; i++) {
                    var both = csv_file[i].split(',');  // split at the comma
                    words[i] = both[0]; // populate word array
                    sylls[i] = both[1]; // populate syllable array
                    //put_word(words[i], sylls[i]);
                };
                check_resize();
        });
    console.log(words);

}
编辑:有人可以告诉我在哪里进行回调吗?

function get_words() {


    $.get('terms.csv', function(data){
            csv_file = data.split('\n');
                // csv file is now in an array, split into seperate word array and syllable array
                for (var i = 0; i < csv_file.length; i++) {
                    var both = csv_file[i].split(',');  // split at the comma
                    words[i] = both[0]; // populate word array
                    sylls[i] = both[1]; // populate syllable array
                    //put_word(words[i], sylls[i]);
                };
        });

}

所以...如果我想等到这个文件被放入数组后再调用另一个函数,我该怎么做?

5 个答案:

答案 0 :(得分:1)

var words = [];
var sylls = [];
function get_words() {
    $.get('terms.csv', function(data){
        // Clear the result arrays
        words = [];
        sylls = [];
        var csv_file = data.split('\n');
        // csv file is now in an array, split into seperate word array and syllable array
        for (var i = 0; i < csv_file.length; i++) {
            var both = csv_file[i].split(',');  // split at the comma
            words[i] = both[0]; // populate word array
            sylls[i] = both[1]; // populate syllable array
            put_word(words[i], sylls[i]);
        };
        check_resize();
    });
}

答案 1 :(得分:0)

var words = [], sylls = [], csv_file=[];
function get_words(){ ... }
function put_word(){ ... }

function needs_words_and_sylls(){ .... }

答案 2 :(得分:0)

在javascript范围内创建并绑定到仅包含它们的函数。

对于您的情况,您的变量words是在函数get_words中创建的,并且只能在get_words函数中访问。要允许两个或多个函数访问同一范围,必须在同一范围内定义它们。

同样对于您的情况,您的两个函数似乎都在全局范围内定义,因此您希望两个函数都可以访问的变量也需要在全局范围内定义:

var words = new Array();
    var sylls = new Array();
    var csv_file = new Array(); // for word arrays

function get_words() {


    $.get('terms.csv', function(data){
        csv_file = data.split('\n');
        // csv file is now in an array, split into seperate word array and syllable array
        for (var i = 0; i < csv_file.length; i++) {
            var both = csv_file[i].split(',');  // split at the comma
            words[i] = both[0]; // populate word array
            sylls[i] = both[1]; // populate syllable array
            put_word(words[i], sylls[i]);
        };
        check_resize();
    });
}

function put_word(word, sylls) {
    console.log(word);
    // place the words into 'words' div
    var divID = document.getElementById("words");   // grab 'words' div
    divID.innerHTML += "<span>" + word + "</span>" + "<sup>" + sylls + "</sup> ";
}

答案 3 :(得分:0)

您可以做一些事情,或者将变量移出函数,如下所示:

var words = new Array();
var sylls = new Array();
var csv_file = new Array(); // for word arrays
function get_words() {
    //code here
}

或者您可以将变量添加为窗口对象

function get_words() {
    window.words = new Array();
    window.sylls = new Array();
    window.csv_file = new Array(); // for word arrays
}

我还记得能够在没有“var”的情况下定义变量,它就像窗口一样变得全局。如果有效,请告诉我。

function get_words() {
    words = new Array();
    sylls = new Array();
    csv_file = new Array(); // for word arrays
}

答案 4 :(得分:0)

由于您正在处理异步接口以读取数据,因此您只能在此进一步构建。因此,基本上你必须扭转“将数据带入'引入处理'的目标。

您可以处理函数注入到阅读功能中:

function get_words( process ) {
    ...
    $.get(...){ function(data){
       ...
       process(word, syllabs);
    }
}

function put_word(w, s) {
   ...
}

//this is where the action starts:
get_words( put_word );

示例:http://jsfiddle.net/xtofl/Qb867/