我有以下功能
function getSetting(item) {
var rawFile = new XMLHttpRequest();
rawFile.overrideMimeType("application/json");
rawFile.open("GET", "settings.json", true);
rawFile.onreadystatechange = function() {
if (rawFile.readyState === 4 && rawFile.status == "200") {
var data = JSON.parse(rawFile.responseText);
return data.item;
}
}
rawFile.send(null);
}
我正在测试这个
console.log(getSetting('restaurant_name'));
返回未定义
一个数据的console.log按预期返回我的JSON文件的JSON对象。
item 的console.log按预期返回 restaurant_name 。
我一定错过了一些明显的东西,但是看过与此相关的Stackoverflow上的其他主题我还没有遇到任何问题。
我尝试使用 data [0] .item 来获得结果,但也没有区别。
settings.json文件的内容:
{
"restaurant_name": "Example_Restaurant_Name",
"restaurant_address": "Example Restaurant, England"
}
提前帮助,谢谢。
答案 0 :(得分:2)
item
名称。请改为尝试:
function getSetting(item, callback) {
var rawFile = new XMLHttpRequest();
rawFile.overrideMimeType("application/json");
rawFile.open("GET", "settings.json", true);
rawFile.onreadystatechange = function() {
if (rawFile.readyState === 4 && rawFile.status == "200") {
var data = JSON.parse(rawFile.responseText);
callback(data[item]); // <----- THIS LINE CHANGES
}
}
rawFile.send(null);
}
getSetting('restaurant_name', function (value) { console.log(value); });
答案 1 :(得分:0)
我认为问题出在返回声明中。
return data.item
当你想要的是使用item变量中存储的密钥返回数据对象中的值时,这将尝试在数据对象中为键“&#39;”返回一个值。
我认为你想要的正确语法是:
return data[item]
我也不认为您可以在此处返回函数中的值 - 因此您需要在异步请求返回值后定义回调函数,或者设置一个变量&# 39; s范围在函数之外。
其他人刚刚发布了一个使用回调函数的答案,所以我建议使用这种方法。