$.getJSON 返回值到变量 [重复]

Posted

技术标签:

【中文标题】$.getJSON 返回值到变量 [重复]【英文标题】:$.getJSON return value to variable [duplicate] 【发布时间】: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。我做了很多研究(here 和here 尤其是here) 并意识到这是因为$.getJSON 的异步性质,我应该使用回调,但对于我的生活我想不通出去。

感谢您的所有帮助。

【问题讨论】:

下面的答案帮助我理解了回调。我应该删除问题吗?还是别管了? 【参考方案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,我更新了我的答案。 谢谢,我成功了。

以上是关于$.getJSON 返回值到变量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

jQuery .getJSON 返回到数组变量和 json 数组操作

如何从 $.getJSON 函数返回变量

jQuery 返回 $.getJSON 值

从选择返回值到函数

html打开一一个新页面返回值到原页面

PHP返回值到div值