所以我试图获取json数据并将其存储在变量中。问题是.onReadyStateChange块内的所有内容都像黑洞,没有任何东西离开那里,所以我无法检索信息。我可以从该块中调用函数并且它可以工作,但是我尝试保存到外部实体的任何内容都将导致null,即使该变量属于窗口范围。
var globalVar;
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var foodsArray = JSON.parse(this.responseText);
globalVar = JSON.stringify(foodsArray);
}
}
console.log(globalVar);
//result will be null, so will foodsArray had I made it global
所以我的问题是,有没有办法将该信息保存在该块之外?感谢。
答案 0 :(得分:1)
console.log
调用是同步的,而globalVar
的分配是异步完成的,因此即使在分配解决之前,null
也会先打印。
==编辑==
您可以选择将XMLHttpRequest对象包装在Promise中:
var prom = new Promise(function(resolve,reject) {
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
resolve(this.responseText);
}
}
});
prom.then(function(foodsArray) {
console.log(foodsArray);
});
答案 1 :(得分:1)
首先,您需要了解ajax的原理。你知道,ajax是一个异步函数,所以当你没有得到返回值时,' console.log(globalVar)'已被执行。所以你应该写道:
var globalVar;
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var foodsArray = JSON.parse(this.responseText);
globalVar = JSON.stringify(foodsArray);
console.log(globalVar); // you can get the result
}
}