当我向他提供ex_id时,我正在尝试使用此函数返回练习的名称,但它只返回undefined。
function getExerciseName(ex_id){
$.getJSON('db.json', function(data_ex) {
for (var i in data_ex.exercises) {
if(data_ex.exercises[i].id == ex_id)
{
return data_ex.exercises[i].name;
} else {
return 'failure'
}
}
});
}
ex_id是正确的,我似乎无法找到任何错误。
感谢您的帮助,谢谢。
答案 0 :(得分:0)
您的函数getExerciseName
不会返回任何内容。它调用具有回调函数的函数$.getJSON
。回调函数在getJSON
结束时调用,但是异步调用。您无法从异步函数中返回同步结果。
我建议你尝试这样的事情:
function getExerciseName(ex_id){
$.getJSON('db.json', function(data_ex) {
for (var i in data_ex.exercises) {
if(data_ex.exercises[i].id == ex_id)
{
return dosomethingWithExerciseName(data_ex.exercises[i].name);
}
}
alert("failure");
});
}
恐怕是你摆脱异步回调函数的唯一途径。
编辑:更改返回值
答案 1 :(得分:0)
您希望获得返回值的位置? getExerciseName
使用目标和回调调用$.getJSON
,然后返回undefined
,因为您没有定义返回语句。
稍后将调用回调,并且由于未处理回调值,因此返回值将丢失。
我认为你需要阅读异步函数。
一个选项是返回实际$ .getJSON调用的结果,该调用将是一个promise,然后对其执行某些操作或传递回调以将返回值处理到函数调用中
编辑: 实际上代码中还有另一个错误。 if子句将使第一个元素之后的for循环中断,无论它是否正确。我希望您希望代码只返回false,如果对于返回数组中的任何元素测试不正确?
尝试这样的事情:
function getExerciseName(ex_id, callback){
$.getJSON('db.json', function(data_ex) {
for (var i in data_ex.exercises) {
if(data_ex.exercises[i].id == ex_id) {
return callback(data_ex.exercises[i].name);
}
}
callback('failure');
});
}
// and call it with something like this
getExerciseName(2, function(data) { console.log(data); });