0

所以,我从一个 php 页面中得到了一个对象,它吐出我拥有的 JSON。当我将全局变量设置为等于我从中创建的对象,然后尝试使用 for(key in obj) 循环获取数据时,它似乎不起作用。

如果我用随机 $.post 之类的东西包围 for 循环,它就可以工作。我很困惑为什么会发生这种情况。

这是我的代码:

var myObj1 = new Object;

$(document).ready(function() {
$.post('namenums.php', {num : 1}, function(data) {
    var temp = $.parseJSON(data);
    for(var key in temp) {
        myObj1[key] = temp[key]['firstname'] + ' ' + temp[key]['lastname'];
    }
});

getStuff();
thing();
});

function thing() {
    for(var key in myObj1) {
        console.log(key);
    }
}

现在,如果我将我的 thing() 函数更改为这样的东西,它就可以工作了。

function thing() {
        $.post('random.php', function(data) {
    for(var key in myObj1) {
        console.log(key);
    }
        });
}

那么,有人可以解释为什么会发生这种情况吗?

4

1 回答 1

1

当然。在第一个示例中,thing()当文档准备好时被调用——不一定是在由 发起的 AJAX 调用$.post完成之后。在第二个示例中,在 AJAX 请求结束、完成并返回结果之前,您不会尝试记录任何内容。

您可以通过将调用移至thing()提供给的回调内部来修复第一个示例$.post

$(document).ready(function() {
  $.post('namenums.php', {num : 1}, function(data) {
    var temp = $.parseJSON(data);
    for(var key in temp) {
      myObj1[key] = temp[key]['firstname'] + ' ' + temp[key]['lastname'];
    }
    thing();
  });

  getStuff();
});
于 2012-07-24T06:21:24.293 回答