jquery移动函数返回JSON无法识别

时间:2013-04-15 21:43:44

标签: jquery json function mobile

当我向他提供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是正确的,我似乎无法找到任何错误。

感谢您的帮助,谢谢。

2 个答案:

答案 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); });