我有下面的Javascript函数,它应该返回数据库中的组的数组。它使用$.getJSON()方法调用get_groups.php,实际上是从数据库中读取数据。
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变量,您将如何解决这个问题?
发布于 2010-08-17 18:47:21
这真的不是范围问题,而是$.getJSON()是异步的,这意味着这部分会在你返回后运行:
for (var i in response) {
groups.push(response[i]);
}您需要在异步请求的回调中调用需要此数据的任何函数,以便在数据可用时运行,如下所示:
$.getJSON('get_groups.php', function(response) {
var groups = [];
for (var i in response) {
groups.push(response[i]);
}
doSomethingThatNeedsGroups(groups);
});当前正在填充您的组数组,但不是在需要的时候。如果您一定要返回它(我强烈建议按预期的方式使用异步模型),您可以使用完整的$.ajax()版本并设置async:false。再说一次……如果可能的话,不要走这条路,只要数据可用,就坚持调用任何需要的函数,因为async: false会锁定用户的浏览器。
https://stackoverflow.com/questions/3501547
复制相似问题