对我的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
)将携带您的数据并正确提醒它。这一个也是:请大家投票关闭,而不是匆忙给出一行或三行错误的答案。。。