簡體   English   中英

使用JQuery和Console.log()的奇怪行為

[英]Strange behaviour with JQuery and Console.log()

我寫了一點JavaScript,這種行為對我來說無法解釋。

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

我基本上得到一個JSON-File,然后將所有現有的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

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

getJSON是一個AJAX函數。 AJAX中的第一個A代表“異步”。 作為一般規則,如果函數接受回調,那么任何依賴於結果的東西都必須在該回調中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM