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> ";
}

それが私が持っているコードです。words[] と sills[] が 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
var words = [], sylls = [], csv_file=[];
function get_words(){ ... }
function put_word(){ ... }

function needs_words_and_sylls(){ .... }
于 2013-10-02T20:13:57.247 に答える
0

JavaScript では、スコープが作成され、それらを含む関数のみにバインドされます。

あなたの場合、変数wordsは関数内で作成され、 get_wordsget_words 関数内でのみアクセスできます。2 つ以上の関数が同じスコープにアクセスできるようにするには、それらを同じスコープで定義する必要があります。

また、あなたの場合、両方の関数がグローバルスコープで定義されているように見えるため、両方の関数にアクセスできるようにする変数は、グローバルスコープでも定義する必要があります:

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 に答える