0

请参阅下面的代码。当请求发送并返回 OK 时,在reqListener()函数中,我得到了我的文本文件输出的内容。

但是,当我稍后尝试返回响应变量时,它仍然是未定义的,好像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);
4

1 回答 1

1

该请求需要时间才能完成。您最好提交一个在文件加载时触发的回调:

function load_text_file(callback)
{

    function reqListener() {

        if (this.readyState == 4 && this.status == 200)
        {
                console.log(response);
                callback(this.responseText);

        }
    }


    var oReq = new XMLHttpRequest();
    oReq.onreadystatechange = reqListener;
    oReq.open("get", "file.txt", true);
    oReq.send();
}

load_text_file(function(){
    console.log(TEXT);
});
于 2013-05-11T12:55:35.853 回答