【发布时间】:2020-06-11 23:19:17
【问题描述】:
我正在使用 geonames api 来获取地理相关信息。我正在尝试使用 getStateInfo 函数获取国家/地区的州名,然后尝试使用 getCityInfo 函数获取该州的城市。我想获得一个州,然后是该州下的城市,但下面的代码首先执行 getStateInfo 函数,然后转到下一个函数 getCityInfo,因为这个问题我无法在该州映射正确的城市。有没有一种方法可以打印一个州,然后打印该州的所有城市?
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var finalList = ''
getStateInfo().then(
function (statedata, status, jqXHR) {
var countryName = statedata["geonames"][0].countryName;
var stateName = ''
var fullStateList = ''
var fullCityName;
$("#Level1").text(countryName);
for (i = 0; i < statedata["geonames"].length; i++) {
getCityInfo(statedata["geonames"][i].geonameId).then(
function (citydata, status, jqXHR) {
for (i = 0; i < citydata["geonames"].length; i++) {
cityName = citydata["geonames"][i].toponymName
console.log(cityName)
}
},
function (jqXHR, status, error) {
var err = eval("(" + jqXHR.responseText + ")");
alert("fail");
});
stateName = "<li>" + statedata["geonames"][i].adminName1 + "</li>"
fullStateList += stateName;
}
$("#Level2").append(fullStateList);
},
function (jqXHR, status, error) {
var err = eval("(" + jqXHR.responseText + ")");
alert("fail");
console.log(err.Message);
});
});
function getCityInfo(stateGeoId) {
var dfd = $.Deferred();
dfd = $.ajax({
url: "http://api.geonames.org/childrenJSON?geonameId=" + stateGeoId + "&username=mydev199&hierarchy=geography",
contentType: 'application/json',
method: 'GET',
dataType: "jsonp",
});
return dfd.promise();
}
function getStateInfo() {
var dfd = $.Deferred();
dfd = $.ajax({
url: "http://api.geonames.org/childrenJSON?geonameId=6252001&username=mydev199&hierarchy=geography",
contentType: 'application/json',
method: 'GET',
dataType: "jsonp",
});
return dfd.promise();
}
</script>
</head>
<body>
<div id="ApplicationResults" class="resultSet">
<ul id="myUL">
<li>
<span class="caret" id="Level1"></span>
<ul class="nested" id="Level2"></ul>
</li>
</ul>
</div>
</body>
</html>
【问题讨论】:
标签: jquery html ajax promise geonames