存储对象的json响应,以便可以从对象中获取值

问题描述:

我正在尝试获取将响应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在他使用它..虽然不是非常清楚.. –

试试这个:

dataStorage.push(geoCode,data); 

代替:

dataStorage[geoCode] = data; 

,如果你正在寻找 '一' 为国家代码,那么你的查询将进一步无法正常工作..你将不得不遍历通过JSON和检查值.. in只检查密钥..

+0

感谢您的回复。我能够从使用 “dataStorage [”AN“]获得数据。geonames [0] .countryName” – Jotzuc

+0

欢迎您 –

你的主要问题是,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