javascript/object无法迭代

javascript/object not able to itereate

本文关键字:迭代 object javascript      更新时间:2024-02-16

所以,我从一个php页面中得到了一个对象,它吐出了我所拥有的JSON。当我将一个全局变量设置为我从中创建的对象,然后尝试使用for(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);
    }
        });
}

那么,有人能解释一下为什么会发生这种情况吗?

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

您可以通过在提供给$.post:的回调中将调用移动到thing()来修复第一个示例

$(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();
});