2016-10-26 43 views
0
var locations = []; 
$.getJSON("locations.json", function(json) { 
    console.log(json); 
    json.forEach(function(locItem){ 
    locations.push(locItem); 
    }); 
}); 

console.log(locations); 

第3行日志确实打印了我的json列表,但第9行仅记录了[]。我试图在全球范围内使用window.locations,global.locations或定义类似将json数据加载到javascript全局变量

var self = this; 

,然后使用funciont内self.locations。它们都不起作用。

回答

0

这是因为执行的顺序如下:

// create empty array 
var locations = []; 

// attempt to get json file (locations is unchanged) 
$.getJSON("locations.json", callback); 

// print out empty locations variable 
console.log(locations); 

// json is finally retrieved, and the callback function is processed 
function callback(json) { 
    console.log(json); 
    json.forEach(function(locItem){ 
     locations.push(locItem); 
    }); 
}); 

回调函数不叫,直到JSON已经被检索。它不会等待发生。

0

尝试:

var locations = []; 
    $.getJSON("locations.json", function(json) { 
     console.log(json); 
     json.forEach(function(locItem){ 
     locations.push(locItem); 
     }); 
    }).then(function() { 
      console.log(locations); 
    });