[英]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.