Ionic 3 HttpClient调用API报错:Property 'json'不存在于Object类型
这个问题我之前在项目里也碰到过,本质是Angular新版本HttpClient和旧Http模块的差异导致的,给你详细说说:
错误根源
你用的HttpClient是Angular 4.3之后推出的新模块,它和旧版Http最大的区别之一就是自动帮你把JSON响应解析成JavaScript对象。也就是说,当你调用http.get()的时候,返回的Observable已经发出了解析好的对象,而不是原始的Response实例——这就导致你调用res.json()时,TypeScript会报错,因为这个对象根本没有json()方法。
修复方案
直接删掉.map(res => res.json())这一行就可以解决问题,修改后的getWeather方法代码如下:
getWeather(city, state){ return this.http.get(this.url+'/'+state+'/'+city+'.json'); }
如果之后你需要对返回的数据做筛选或者转换(比如只提取API返回里的特定字段),可以直接在map里操作已经解析好的对象,举个例子:
// 假设接口返回的结构中,我们只需要current_observation下的天气数据 getWeather(city, state){ return this.http.get(this.url+'/'+state+'/'+city+'.json') .map(res => res['current_observation']); }
额外提一句:你当前用的RxJS导入方式import 'rxjs/add/operator/map'在Angular 5对应的RxJS 5版本里是完全没问题的,不用调整;如果之后升级到RxJS 6+,才需要改成pipe结合map的写法,但就你现在的环境来说,不需要做这部分改动。
内容的提问来源于stack exchange,提问作者Biswajit
相关产品推荐
相关产品推荐

