2016-11-08 23 views
1

我有一個函數foo,它接收一個名爲locations的對象數組,並具有包含訪問Foursquare API的信息的字符串fourSquareUrl。我從API獲取數據並將其推送到locationData陣列。無法訪問陣列的任何索引,但在完全登錄時陣列能夠正常工作

當我嘗試訪問數組的索引locationData[i]時,我得到未定義的值。但是當我console.log(locationData);該數組顯示正確。謝謝你的幫助!

var locationData = []; 
function foo(locations) { 
    for (x in locations) { 
     var fourSquareUrl = 'API information'; 
     $.getJSON(fourSquareUrl, function(data) { 
       var foursquareLocation = data.response.venues; 
       if(foursquareLocation) { 
        var item = foursquareLocation[0]; 
        if (item) { 
         var address = item.location.formattedAddress; 
         locationData.push(address); 
        } 
        else { 
         var noAddress = "No location data available"; 
         locationData.push(noAddress); 
        } 
       } 
     }) 
    } 
} 

// works correctly 
console.log(locationData); 

// results in 'undefined' 
console.log(locationData[0]); 
+0

是是異步函數,你應該添加的console.log的回調函數內(塊'$ .getJSON(fourSquareUrl,功能(數據){')來獲取結果。 – vitomd

+0

太好了,謝謝! – rdtn

回答

0

檢索到的地址可能是未定義的。如果是這種情況,您應該檢查這種方式: var locationData = [];

function foo(locations) { 
    for (x in locations) { 
     var fourSquareUrl = 'API information'; 
     $.getJSON(fourSquareUrl, function(data) { 
       var foursquareLocation = data.response.venues; 
       if(foursquareLocation) { 
        var item = foursquareLocation[0]; 
        if (item) { 
         var address = item.location.formattedAddress; 
         if (!address) { 
          console.log('Empty address is returned'); 
         } 
         locationData.push(address); 
        } 
        else { 
         var noAddress = "No location data available"; 
         locationData.push(noAddress); 
        } 
       } 
     }) 
    } 
} 

// works correctly 
console.log(locationData); 

// results in 'undefined' 
console.log(locationData[0]);