首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Javascript中需要有关变量作用域的帮助

在Javascript中需要有关变量作用域的帮助
EN

Stack Overflow用户
提问于 2010-08-17 18:43:28
回答 3查看 187关注 0票数 7

我有下面的Javascript函数,它应该返回数据库中的组的数组。它使用$.getJSON()方法调用get_groups.php,实际上是从数据库中读取数据。

代码语言:javascript
运行
复制
function get_groups() {
    var groups = [];

    $.getJSON('get_groups.php', function(response) {
        for (var i in response) {
            groups.push(response[i]);
        }
    }

    return groups;
}

不幸的是,这个函数没有像预期的那样工作,因为groups.push(response[i]);没有填充var groups = []; (据我所知,它填充了一些其他的groups数组,可能是全局数组)。

假设我不想有一个全局groups变量,您将如何解决这个问题?

EN

Stack Overflow用户

回答已采纳

发布于 2010-08-17 18:47:21

这真的不是范围问题,而是$.getJSON()是异步的,这意味着这部分会在你返回后运行:

代码语言:javascript
运行
复制
for (var i in response) {
  groups.push(response[i]);
}

您需要在异步请求的回调中调用需要此数据的任何函数,以便在数据可用时运行,如下所示:

代码语言:javascript
运行
复制
$.getJSON('get_groups.php', function(response) {
    var groups = [];
    for (var i in response) {
        groups.push(response[i]);
    }
    doSomethingThatNeedsGroups(groups);
});

当前正在填充您的组数组,但不是在需要的时候。如果您一定要返回它(我强烈建议按预期的方式使用异步模型),您可以使用完整的$.ajax()版本并设置async:false。再说一次……如果可能的话,不要走这条路,只要数据可用,就坚持调用任何需要的函数,因为async: false会锁定用户的浏览器。

票数 5
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3501547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档