2012-07-24 70 views
0

所以,我從一個PHP頁面獲取了一個對象,吐出了JSON。當我設置一個全局變量等於我創建的一個對象,然後嘗試使用for(key in obj)循環獲取數據時,它似乎不起作用。javascript/jquery - 對象無法迭代

如果我用一個隨機的$ .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); 
    } 
} 

現在,如果我改變我的事()函數來像這樣它的工作原理。

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

那麼,有人可以解釋爲什麼會發生這種情況嗎?

+0

你不需要'$ .parseJSON' – zerkms 2012-07-24 06:19:55

+3

在AJAX的第一個A代表異步 – Alexander 2012-07-24 06:21:04

回答

1

當然。在第一個例子中,thing()在文檔準備就緒時被調用 - 不一定在$.post發起的AJAX調用完成後調用。在第二個示例中,在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(); 
}); 
+0

真棒, 謝謝。當你這樣說時,我不明白爲什麼我從來沒有意識到這一點。 – scott21493 2012-07-24 06:23:47