$ .getJSON将值返回给变量

时间:2015-04-26 10:44:28

标签: javascript jquery asynchronous callback

这是我的问题

我有一个充满国家/地区代码的JSON文件,以及一个获取随机国家/地区代码的函数,如下所示:

function getRandomCountryCode(specificMap){
  $.getJSON('../maps/' + specificMap + '.json', function( data ) {
    var countries = [];
    for (var i in data.country) {
      countries.push(data.country[i].code);
    }
    var rndCountryCode = countries[Math.floor(Math.random()*countries.length)];
    return rndCountryCode;
  });
};

在另一个函数中,我调用上面的函数并尝试将rndCountryCode变量存储到另一个变量中,以便它可以在新函数中使用。

function loadMap(map){
  var specificMap = map;
  var y = getRandomCountryCode(specificMap);
  console.log("Y is : " + y);
}

我得到的只是undefined。我做了很多研究(herehere,特别是here)并且意识到这是因为$.getJSON的异步性质,我应该使用回调但是为了生命我无法弄明白。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

之后输入您要执行的代码
var y = getRandomCountryCode(specificMap);

成功回调

function getRandomCountryCode(specificMap){
  $.getJSON('../maps/' + specificMap + '.json', function( data ) {
    var countries = [];
    for (var i in data.country) {
      countries.push(data.country[i].code);
    }
    var rndCountryCode = countries[Math.floor(Math.random()*countries.length)];
    >>>console.log("rndCountryCode  is : " + rndCountryCode );
    return rndCountryCode;
  });
};

由于getJSON是异步的,并且您不知道响应何时会返回,因此保证代码操作响应的唯一方法是将其放入成功处理程序(getJSON的第二个参数)。

成功处理程序在成功响应时会被执行,无论花费多长时间。