在纯Javascript中存储AJAX的结果

时间:2017-08-22 12:17:53

标签: javascript ajax

我正在学习AJAX的基础知识,并且我试图将调用的结果存储在变量中。我有一个带有此对象的data.txt文件:

[
{ "id": "5688","name": "  Jorge Luis Borges"},
{ "id": "5799","name": "  Lewis Carroll"}
]

我打电话给它:

var object = "No object";
function requestFunction(url){
    var request = new XMLHttpRequest();
    request.open("GET", url, true);
    request.addEventListener("load", function() {
        object = this.response;
    });
    request.send(null);
    return object;
};
console.log(requestFunction("data.txt"));

我不知道为什么,但result = this.response不会影响我想要存储结果的变量,控制台会输出其原始值:No object

知道为什么吗?

编辑:我一直在How do I return the response from an asynchronous call?阅读幻想响应,我更新了函数以包含一个回调,当被调用时,输出结果:

function requestFunction(url){
    var request = new XMLHttpRequest();
    request.open("GET", url, true);
    request.addEventListener("load", function() {
        outputFunction(this.response); // The callback
    });
    request.send(null);
};

// This is the callback
function outputFunction(a){
    console.log(a);
};

requestFunction("data.txt");

有效。现在,在回调中,我想将结果存储在变量中,并在函数外部使用它。类似的东西:

// This is the callback
var storedObject = "Empty";
function outputFunction(a){
    storedObject = a;
    return storedObject;
};

但同样,它不起作用。 ¿是因为与上一个代码相同的原因吗?

1 个答案:

答案 0 :(得分:0)

request.addEventListener("load", function() {
        object = this.response;
    });

以异步方式调用

object = this.response;

稍后会更新,您的代码

console.log(requestFunction("data.txt"));

不等待它完成更新,因此打印出原始值