0

如何在 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> ";
}

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

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

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]);
                };
        });

}

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

4

5 回答 5

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();
    });
}
于 2013-10-02T20:15:09.687 回答
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> ";
}
于 2013-10-02T20:14:24.940 回答
0
var words = [], sylls = [], csv_file=[];
function get_words(){ ... }
function put_word(){ ... }

function needs_words_and_sylls(){ .... }
于 2013-10-02T20:13:57.247 回答
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”的情况下定义变量,它就像 window.var 一样成为全局变量。让我知道这是否有效。

function get_words() {
    words = new Array();
    sylls = new Array();
    csv_file = new Array(); // for word arrays
}
于 2013-10-02T20:17:55.847 回答
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/

于 2013-10-02T20:20:56.990 回答