2013-11-24 44 views
0

我寫了一點JavaScript,這種行爲是無法解釋的我。奇怪的行爲與JQuery和Console.log()

var allPois = []; 
$.getJSON("pois.json", function(data) { 
    $.each(data, function(i, poi) { 
     allPois[poi.id] = poi; 
    }); 
    console.log(allPois["abc"]); 
}); 

我基本上得到的JSON文件,然後把所有的現有entrys進入「allPois」變量。
這個例子有效。它按預期方式顯示控制檯中的對象,沒有任何問題。但下一個沒有。

var allPois = []; 
$.getJSON("pois.json", function(data) { 
    $.each(data, function(i, poi) { 
     allPois[poi.id] = poi; 
    }); 
}); 
console.log(allPois["abc"]); 

注意console.log()語句的位置。控制檯顯示「未定義」。我使用Firefox和Chrome進行了測試。 這裏有什麼問題?

非常感謝!

zuris57

回答

2

$.getJSON是異步的;包含函數的執行不會停止,並等待Ajax請求默認完成。這就是回調存在的原因 - 當你實際使用請求的響應時,它會被回調。

它真的象你應該這樣做,順便說一句:

var allPois = {}; // Object, not array 

$.getJSON("pois.json", function(data) { 
    $.each(data, function(i, poi) { 
     allPois[poi.id] = poi; 
    }); 

    console.log(allPois.abc); 
}); 
+0

非常感謝您! – zuris57

0

getJSON是一個AJAX功能。 AJAX中的第一個A代表「異步」。一般來說,如果一個函數接受回調,那麼依賴於結果的任何東西都必須在回調中。