如何在jQuery .change函数中调用异步函数?我尝试了以下内容,它返回“undefined”......
async function getData(){
try {
return await $.getJSON('./data.json').promise();
} catch(error) {
console.log("error" + error);
throw error;
} finally {
alert("done");
}
}
这里是JSON的一个例子:
{
"stuff": {
"First": {
"FirstA": {
"year": [2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017],
"Categories": ["Suspension", "Electrical", "Performance", "Motor"]
},
"FirstB": {
"year": [2007, 2008, 2009, 2010, 2011, 2012],
"Categories": ["Suspension", "Electrical", "Performance", "Motor"]
}
},
"Second": {
"SecondA": {
"year": [2002, 2003, 2004, 2005, 2006],
"Categories": ["Suspension", "Electrical", "Performance", "Motor"]
},
"SecondB": {
"year": [2007, 2008, 2009, 2010, 2011, 2012],
"Categories": ["Suspension", "Electrical", "Performance", "Motor"]
}
}
}
}
这是jQuery函数:
$('select[name="make"]').change(function(){
// THIS LET RETURNS EITHER First or Second
let makeSelected = $('select[name="make"] option:selected').val();
getData().then(data => {
let topModels = data.stuff;
// THIS RETURNS UNDEFINED
console.log(topModels.makeSelected);
// THIS RETURNS THE CORRECT DATA
console.log(topModels.First);
});
});
为什么let变量不能用于第一个console.log?
答案 0 :(得分:1)
一切都应该可以正常工作,但是您正在访问“data.stuff”中不存在的属性(“makeSelected”)。使用data.stuff.makeSelected
就是你所要求的。现在,如果您打算查找名称等于变量“makeSelected”内的值的属性,则有2条主要路径可供选择:
1)使用“eval”:您可以像let str = "data.stuff."+makeSelected; let result = eval(str);
2)您可以使用[]
表示法来访问JS对象属性,就像我最喜欢的解决方案let result = data.stuff[makeSelection];
一样。