逐行读取本地文本标题,在数组中存储行

时间:2014-05-05 19:08:07

标签: javascript

我有一个本地文本文件wordsEn.txt,它是字典中的所有单词(小写):

a
aah
aahed
aahing
aahs
aardvark
[etcetera]

在页面加载时,我希望将它们放入数组中:

words = ["a", "aah", "aahed", "aaching", "aahs", "aardvark", ...];

这是我在尝试阅读文本文件时返回响应代码的功能:

    function get_words()
    {
        var rawFile = new XMLHttpRequest();
        rawFile.open("POST", "wordsEn.txt", true);
        rawFile.onreadystatechange = function ()
        {
            if (rawFile.readyState === 4)
            {
                if (rawFile.status === 200 || rawFile.status == 0)
                {
                    return rawFile.responseText;
                }
            }

        }
        rawFile.send(null);
    }

我试图在此复制程序:Javascript - read local text file

(我承认我在没有真正理解它的作用的情况下复制了它。)

显然它不起作用,因为

    var resp = get_words(); 
    document.getElementById("spresdiv").innerHTML += "<p>" + resp + "</p>";

undefined div中写spresdiv。知道为什么会这样,以及如何解决它?

在相关的说明中,有没有人知道JavaScript数组是用树还是任何其他类型的快速查找实现的? indexOf(...)是否使用线性搜索?

1 个答案:

答案 0 :(得分:1)

Ajax是异步的。您无法从responseText返回get_words。您应该使用回调。

function get_words(callback) {
    var rawFile = new XMLHttpRequest();
    rawFile.open("POST", "wordsEn.txt", true);
    rawFile.onreadystatechange = function () {
        if (rawFile.readyState === 4) {
            if (rawFile.status === 200 || rawFile.status == 0) {
                callback(rawFile.responseText);
            }
        }

    }
    rawFile.send(null);
}

get_words(function (resp) {
    document.getElementById("spresdiv").innerHTML += "<p>" + resp + "</p>";
});