【问题标题】:$.getJSON return value to variable [duplicate]$.getJSON 返回值到变量 [重复]
【发布时间】:2015-07-04 18:40:00
【问题描述】:

这是我的问题

我有一个包含国家代码的 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 的异步性质,我应该使用回调,但对于我的生活我想不通出去。

感谢您的所有帮助。

【问题讨论】:

  • 下面的答案帮助我理解了回调。我应该删除问题吗?还是别管了?

标签: javascript jquery asynchronous callback


【解决方案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 的第二个参数)。

无论用了多长时间,成功响应都会在成功响应时执行。

【讨论】:

  • 你能解释一下答案中的问题和解决方案吗?
  • @PaulFitzgerald,我更新了我的答案。
  • 谢谢,我成功了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2013-04-02
相关资源
最近更新 更多