我正在尝试使用此函数作为全局变量返回一个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
消息。
如果你能给我一些关于这里行为的见解并且可能帮我修复它以完成以字符串形式返回文本文件内容的任务,我会很高兴。提前致谢。
答案 0 :(得分:1)
您的代码正在执行异步。
基本上这意味着附加到onreadystatechange
的匿名函数只会在收到数据后执行。因此,当您的alert
位于此功能内部(allText = rawFile.responseText
下方)时,变量allText
将包含您的文件内容(因为它有机会被填充)。
但是,如果将警报置于return语句之上,则尚未填充allText
变量,并且在接收文件内容之前函数将返回。
你可以克服这个问题的一种方法是将回调函数传递给get_words
。