更改函数中jQuery内的Javascript异步函数返回undefined

如何在jQuery .change函数中调用异步函数? 我尝试了以下内容,它让我“未定义”……

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?

一切都应该工作正常,但你正在访问“data.stuff”中不存在的属性(“makeSelected”)。 通过使用data.stuff.makeSelected ,这就是你要求的。 现在,如果您打算查找名称等于变量“makeSelected”内的值的属性,则有2个主要路径可供选择:

1)使用“eval”:你可以构建一个字符串,就像let str = "data.stuff."+makeSelected; let result = eval(str); let str = "data.stuff."+makeSelected; let result = eval(str);

2)您可以使用[]表示法来访问JS对象属性,就像let result = data.stuff[makeSelection]; 这是我的首选解决方案。