gpt4 book ai didi

javascript - 在javascript中访问回调函数的变量 "outside"

转载 作者:行者123 更新时间:2023-11-29 19:06:09 24 4
gpt4 key购买 nike

loadJSON(path, callback) {
console.log("path: " + path);
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', path, true);
xobj.onreadystatechange = function () {
if (xobj.readyState == 4 && xobj.status == "200") {
callback(xobj.responseText);
}
};
xobj.send(null);
}

以上是一个在本地访问json文件的函数。然后从 `foobar()' 解析检索到的数据。然而,从回调函数的“外部”,无法访问变量“json”。我已经搜索过类似的 SO 问题和异步概念,但仍然无法找到解决它的方法。

function foobar() { 
var json;
loadJSON("data.json", function(response) {
json = JSON.parse(response);
console.log(json[0].name); // Successfully shows the result
});
console.log(json[0].name); // TypeError: json is undefined
}

有没有办法访问回调“外部”的变量?

最佳答案

是因为设置了Asynchronous模式。

console.log(json[0].name); // TypeError: json is undefined

这段代码是在json填充之前执行的。因此,当您尝试访问它时,它可能仍然是空的。此行中的第三个参数将其定义为异步:

xobj.open('GET', path, true);

你可以试试

xobj.open('GET', path, false);

但它不再是异步的,用户将不得不等待请求结束,因此最好确保在调用回调方法时使用“json”var,而不是之前。保持异步模式。为此,您需要重组代码。

Gerardo Furtado 发布的链接是完全准确的,您应该检查一下。

编辑:正如我和其他用户所说,async:false 不是很好,所以我正在编辑我的答案:

function foobar() { 
var json;
loadJSON("data.json", function(response) {
json = JSON.parse(response);
// Call another function with json that is now filled with data
triggered(json);
});
}

function triggered(json) {
console.log(json[0].name);
// Do your work on json
}

关于javascript - 在javascript中访问回调函数的变量 "outside",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42666843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com