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

时间:2013-11-24 00:10:57

标签: javascript jquery

我写了一些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

2 个答案:

答案 0 :(得分: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);
});

答案 1 :(得分:0)

getJSON是一个AJAX函数。 AJAX中的第一个A代表“异步”。作为一般规则,如果函数接受回调,那么任何依赖于结果的东西都必须在该回调中。