[英]Store json response to object so can get the value from the object
我正在嘗試獲取將響應JSON數據的地名API。 我創建一個dataStorage對象,並將響應放入其中。 目前,從存儲對象獲取值時出現問題。
這是我的代碼:
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"
}
]
}
嘗試這個 :
dataStorage.push(geoCode,data);
代替:
dataStorage[geoCode] = data;
如果你正在尋找“一”作為國家代碼,那么你的查詢將進一步不會work..You將迭代通過JSON並檢查值.. in
只檢查鍵..
您的主要問題是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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.