将AJAX结果分配给变量(Vanilla JS)

时间:2019-03-22 20:32:43

标签: javascript ajax

在大多数情况下,我的代码都在工作,但显然我对AJAX或/和/或如何将响应数据存储在所需的变量中产生了误解。

var stored_data = getData(url, function(data){
  return data;
});

我期望stored_data = data,但那没有发生。 如果我将return data替换为console.log(data),很明显我正在收到预期的数据。

我有点困惑为什么没有将数据分配给stored_data

function getData(source, callback) {
    var xhr = new XMLHttpRequest();
    var result= '';

    xhr.open("GET", source);
    xhr.responseType = "document";
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 && xhr.status === 200){
            result = xhr.responseXML.getElementsByTagName('pre')[0].innerHTML;
            callback(result);
    }
  }
  xhr.send();
}

我是否正确地将stored_data的值设置为AJAX请求的结果?

注意:在阅读我断言为DUPING的问题后,我问了这个问题。 另一个问题有很多概念上的细节。就我要解决的问题而言,我的问题非常简单。

我对将函数调用结果赋值给变量有什么误解?感觉这很简单,我没看到。

显然,我对变量和函数赋值感到困惑。

例如

var somevariable = sum(9,1);

function sum(a, b){return a + b}

console.log(somevariable) // returns 10

因此,有了这种理解, 如果我调用getData函数并将其分配给变量 数据应该放在那个容器中吗?

如果我console.log(),可以使用回调函数 但是,如果将其记录到控制台,则无法使用该信息。

所以我误解了variable = synchronous_resultvariable = async_result

如何使用VANILLA JS和回调将变量解析为异步调用的检索结果?我的误解是什么,如何理解似乎很简单的问题?

我理解异步。那么,如何获取要解析的数据? 除了检索数据然后存储它之外,我不需要对数据做任何其他事情?

解决方案:为了避免他人遭受类似的误解 在帖子中借用了这个据称是重复的概念:

我有一个对象,该对象的属性要用URL中的数据填充。 这需要AJAX操作。

datastore.info是属性和对象。

解决方案采用以下代码形式:

datastore.info = getINFO(url, function(data){datastore.info = data;});

就是这样。

对我来说,这是违反直觉的。 我原以为函数调用会产生一个值,但是对于异步代码,函数调用不会导致赋值。这是来自异步步骤的延迟动作。

结果是,在断言回调时发生分配。这种逻辑与同步编码背道而驰,并且通过这种特别简单的练习可以清楚地看到这一点。

当您认为自己所没有的帮助实际上并不存在时,自学就是一个bit子。 但是,花8个小时来解决一线问题确实会使人意识到自己的坚持。

弄清楚这一点有助于我“提高”回调,异步操作的概念,并有望将其作为“超时”操作的强大工具。

0 个答案:

没有答案