javascript - $.getJSON 返回值到变量

标签 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 的异步特性,并且我应该使用回调,但我一生都无法弄清楚。

感谢您的帮助。

最佳答案

将您要执行的代码放在

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

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

关于javascript - $.getJSON 返回值到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29876626/

相关文章:

javascript - 无法从 jQuery.ajax 成功函数返回值

javascript - JQuery 或 JavaScript : How determine if shift key being pressed while clicking anchor tag hyperlink?

jquery - 使用 browserify 时找不到模块 'jquery'

javascript - Mongoose 和 NodeJS : Creating a unique system-generated username

javascript - 有没有办法设置引导工作室网站中显示的每页列数?

javascript - 从数组中生成一个随机索引但排除一个。 javascript

javascript - IIS直播流畅流: How to hide control bar?

php - 我可以在插入数据库值后立即使用它吗?

javascript - 如何进行两个 Backbone 提取调用并将其组合

javascript - Soundcloud JS API 连接方法不起作用