0
请参阅下面的代码。当请求被发送并返回OK时,在reqListener()
函数中,我得到了我的文本文件输出的内容。如何使用AJAX请求干净地获取文本文件
但是,当我尝试稍后返回响应变量时,它仍然未定义,就好像reqListener()
还没有被调用。这可能是由于async=true
的说法?
此外,是否有一个更好的方式来获取响应文本的功能,如果它的请求成功,就像使用闭包?
function load_text_file()
{
function reqListener() {
if (this.readyState == 4 && this.status == 200)
{
response = this.responseText;
console.log(response);
}
}
var response;
var oReq = new XMLHttpRequest();
oReq.onreadystatechange = reqListener;
oReq.open("get", "file.txt", true);
oReq.send();
return response;
}
var TEXT = load_text_file();
console.log(TEXT);
问题是,load_text_file()在文件加载前返回。当请求实际完成时,你的函数reqListener被调用。所以,程序流程就像这样。 (1)请求文件(2)从proc返回,没有结果,所以响应未定义。 (3)console.log(TEXT) - 响应尚未返回。 (4)请求完成后,console.log(响应)现在具有要显示的有效数据。 – enhzflep 2013-05-11 11:17:30
AJAX =异步。你的函数在加载前返回。重新考虑你的结构。 – Dave 2013-05-11 11:17:56
我不知道该怎么做。我不能将'reqListener'的输出分配给任何东西,因为我不知道'onreadystatechange'何时会发生。我的意思是,我可以有一个全局变量TEXT,然后将TEXT分配给'reqListener()'中的'reponseText',但是那个函数依赖于一些看起来很糟糕的外部变量。 – njp 2013-05-11 11:50:48