2016-08-16 93 views
0

我正在嘗試獲取將響應JSON數據的geonames API。 我創建一個dataStorage對象並將響應放入它。 目前我從存儲對象獲取值時有問題。存儲對象的json響應,以便可以從對象中獲取值

這裏是我的代碼:

var dataStorage = new Object(); 

function CountryQuery(geoId, geoCode) { 
    $.ajax({ 
    type: "GET", 
    url: "http://api.geonames.org/childrenJSON?geonameId=" + geoId + "&username=tompi", 
    dataType: "json", 
    success: function(data) { 
     dataStorage[geoCode] = data; 
    } 
    }); 
} 

if (!('AN' in dataStorage)) { 
    CountryQuery(6255152, "AN"); 
} 

$(dataStorage).find('AN').geonames.countryName; 

的JSON響應看起來象下面這樣:

{ 
    "totalResultsCount":2, 
    "geonames":[ 
     { 
     "countryId":"6697173", 
     "countryCode":"AQ", 
     "name":"Antarctica", 
     "countryName":"Antarctica" 
     }, 
     { 
     "countryId":"3371123", 
     "countryCode":"BV", 
     "name":"Bouvet Island", 
     "countryName":"Bouvet Island" 
     } 
    ] 
} 
+0

你能提供一個JSON片段嗎?現在無法訪問它,首先想看看它。 – Dandy

+0

你正在初始化'datastorage'的方式是錯誤的。如果你提供了一個預期的JSON樣本,這將會有所幫助 –

+0

@mplungjan可能datastorage是全局的,他希望在一個名爲'geoCode'的鍵中添加響應。這樣他可以使用IN在他使用它..雖然不是非常清楚.. –

回答

0

試試這個:

dataStorage.push(geoCode,data); 

代替:

dataStorage[geoCode] = data; 

,如果你正在尋找 '一' 爲國家代碼,那麼你的查詢將進一步無法正常工作..你將不得不遍歷通過JSON和檢查值.. in只檢查密鑰..

+0

感謝您的回覆。我能夠從使用 「dataStorage [」AN「]獲得數據。geonames [0] .countryName」 – Jotzuc

+0

歡迎您 –

-2

你的主要問題是,AJAX請求異步。這意味着函數CountryQuery在請求返回JSON值之前立即返回。你必須從dataStorage獲得成功函數內部的值:

var dataStorage = {}; 

function countryQuery(geoId, geoCode, callback) { 
    $.ajax({ 
     type: 'GET', 
     url: 'http://api.geonames.org/childrenJSON?geonameId=' + geoId + '&username=tompi', 
     dataType: 'json', 
     success: function(data) { 
      dataStorage[geoCode] = data; 
      callback(); 
     } 
    }); 
} 

function useDataStorage() { 
    alert(dataStorage.AN.geonames[0].countryName); 
} 

if (dataStorage.AN === undefined) countryQuery('6255152', 'AN', useDataStorage); 
else useDataStorage(); 
+0

爲什麼downvote? – mplungjan