我写了一些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
答案 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代表“异步”。作为一般规则,如果函数接受回调,那么任何依赖于结果的东西都必须在该回调中。