在我的JavaScript中对此行为感到困惑

时间:2014-04-23 17:40:10

标签: javascript html

我正在尝试使用此函数作为全局变量返回一个String对象,该对象是本地文本文件的内容。现在它返回一个空的String

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

    }
    rawFile.send(null);
    return allText;
}

但是,当我将第二个if语句的主体更改为

allText = rawFile.responseText;
alert(allText);

我收到alert消息,该消息是文本文件的正确内容。

,当我将alert消息放在return语句之前时,我收到一条空的alert消息。

如果你能给我一些关于这里行为的见解并且可能帮我修复它以完成以字符串形式返回文本文件内容的任务,我会很高兴。提前致谢。

1 个答案:

答案 0 :(得分:1)

您的代码正在执行异步。

基本上这意味着附加到onreadystatechange的匿名函数只会在收到数据后执行。因此,当您的alert位于此功能内部(allText = rawFile.responseText下方)时,变量allText将包含您的文件内容(因为它有机会被填充)。

但是,如果将警报置于return语句之上,则尚未填充allText变量,并且在接收文件内容之前函数将返回。

你可以克服这个问题的一种方法是将回调函数传递给get_words