对我的JavaScript中的这种行为感到困惑吗

对我的JavaScript中的这种行为感到困惑吗,javascript,html,Javascript,Html,我试图使用此函数作为全局变量返回一个字符串对象,该对象是本地文本文件的内容。现在它正在返回一个空的字符串 function get_words() { var rawFile = new XMLHttpRequest(); rawFile.open("GET", "wordsEn.txt", true); var allText = new String(); rawFile.onreadystatechange = function () {

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

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);
我确实收到了一条
警报
消息,它是文本文件的正确内容

然而,当我将
警报
消息放在
返回
语句之前时,我得到一条空的
警报
消息


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

您的代码正在异步执行

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

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


解决这个问题的一种方法是将回调函数传递给
get\u words

,这是因为ajax调用需要一些时间才能完成,它是异步运行的。在第二个
if
中,您处于
onreadystatechange
函数中,该函数针对各种状态被多次调用。其中一个(
200
)将携带您的数据并正确提醒它。这一个也是:请大家投票关闭,而不是匆忙给出一行或三行错误的答案。。。