授人以鱼不如授人以渔
这里只讲逻辑(伪代码),不写代码。
需求:获取天气数据
//条件:
var appkey='xxxxxx';
var url='https://way.jd.com/jisuapi/weather?city=xxx&cityid=xxxx&citycode=xx&appkey=appkey';
则需要:city cityid citycode
第一步:获取所有的地区信息,这样就可以城市级联了
var url='https://way.jd.com/jisuapi/weather1?appkey=9b066f875202e509f662b86efdc990d8';
//将获取到的信息存到一个districts变量里面
var districts=http.get(url);
//通常一个城市对象的数据结构是这样的
district={
citycode:'101010100',
city:'北京',
cityid:'1',
parentid:'0'
}
citycode:城市编号,如果是省份则该属性为空;
city:城市的名称;
cityid:城市id
parentid:表示它的上一级的cityid,为0,则代表没有上一级,则是直辖市或者省份;
若一个地区对象恰好citycode为空,且parentid为0,则该对象一定是省份
例如:
province={ city={
"citycode":"", "citycode":"101220601"
"city":"安徽", "city":"安庆",
"cityid":"2", "cityid":"35",
"parentid":"0" "parentid":"2"
}, }
安徽是省所以citycode为空;安庆是安徽的市,所以安庆的parentid是安徽的cityid。
第二步:通过传入parentid获取所有parentid相同的地区信息
传入parenid=0,则是获取所有的省份、直辖市
传入parentid为81,即获取cityid=81(惠州),所有的县、区
getSubdistricts(districtid: string): Promise<Array<DistrictInfo>> {
return new Promise((resolve, reject) => {
this.getDistrictInfos()
.then(() => {
this.wxDistrictInfos.forEach(
districtinfo => {
if (districtinfo.parentid === districtid) {
subdistricts.push(districtinfo);
}
});
resolve(subdistricts);
})
.catch(() => reject()
);
});
第三步:通过城市名获取citycode
getCityObj(cityName){
//....
var obj={
"citycode":"xxx",
"city":"xxx",
"cityid":"xxx",
"parentid":"xxx"
}
return obj;
}
第四步:返回正确格式的url
getUrl( cityObj ){
return 'https://way.jd.com/jisuapi/weather?
+ 'city=' + district.city
+ '&cityid=' + district.cityid
+ '&citycode=' + district.citycode
+ '&appkey=9b066f875202e509f662b86efdc990d8';
}
第五步:通过城市对象获取天气数据
getWeather( cityObj){
this.get( getUrl (cityObj).then(res=>{
console.log( res)
}
}