存储对象的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"
}
]
}
试试这个:
dataStorage.push(geoCode,data);
代替:
dataStorage[geoCode] = data;
,如果你正在寻找 '一' 为国家代码,那么你的查询将进一步无法正常工作..你将不得不遍历通过JSON和检查值.. in
只检查密钥..
感谢您的回复。我能够从使用 “dataStorage [”AN“]获得数据。geonames [0] .countryName” – Jotzuc
欢迎您 –
你的主要问题是,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();
为什么downvote? – mplungjan
你能提供一个JSON片段吗?现在无法访问它,首先想看看它。 – Dandy
你正在初始化'datastorage'的方式是错误的。如果你提供了一个预期的JSON样本,这将会有所帮助 –
@mplungjan可能datastorage是全局的,他希望在一个名为'geoCode'的键中添加响应。这样他可以使用IN在他使用它..虽然不是非常清楚.. –