Javascript $.getJSON返回变量的值

Javascript $.getJSON返回变量的值,javascript,jquery,asynchronous,callback,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[

这是我的问题

我有一个充满国家代码的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;
  });
};
在另一个函数中,我调用上述函数,并尝试将
rndconcountycode
变量存储到另一个变量中,以便在新函数中可用

function loadMap(map){
  var specificMap = map;
  var y = getRandomCountryCode(specificMap);
  console.log("Y is : " + y);
}
我得到的只是
未定义的
。我做了很多研究,尤其是)并意识到这是因为
$.getJSON
的异步性质,我应该使用回调,但就我的一生而言,我无法理解它


谢谢你的帮助。

把你要做的代码放在后面

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的第二个参数)


成功处理者在收到成功的回复时会欣喜若狂,不管回复花了多长时间。

你能解释一下答案中的问题和解决方案吗?@PaulFitzgerald,我更新了我的答案。谢谢,伙计,我成功了。下面的答案现在帮助我理解了回调。我应该删除这个问题吗?还是听其自然?