import { Injectable } from '@angular/core';
import { Http,Response } from '@angular/http';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
@Injectable()
export class CommentService{
private _url :string ="https://jsonplaceholder.typicode.com/posts"
constructor(private _http:Http){}
// method to fetch CommentS from a api service
getComments(){
return this._http.get(this._url)
.map((response:Response)=> response.json())
.catch(this._errorHandler);
}
_errorHandler(error:Response){
console.error(error);
return Observable.throw(error ||"Server Error");
}
}
以上代码适用于此网址https://jsonplaceholder.typicode.com/posts
但不适用于此网址http://ergast.com/api/f1/2016/driverStandings.json
任何想法...... TIA
答案 0 :(得分:0)
答案 1 :(得分:0)
Aravind在这里是正确的轨道,但MRData
区分大小写,并且映射有点偏。在这里映射响应的正确方法是:
return this._http.get(this._url)
.map((response:Response)=> response.json().MRData)
.catch(this._errorHandler);
}
您的组件:
getData() {
this.service.getData()
.subscribe(data => {
this.data = data;
});
}
然后您可以访问数据,例如:
<div>
<b>Series:</b> {{data?.series}}<br>
<a><b>Url:</b> {{data?.url}}</a>
</div>
然后您的响应中似乎有很多嵌套对象,因此这可能会对您有所帮助:Access / process (nested) objects, arrays or JSON
这是一个带有模拟JSON的演示,但我确实尝试了你提供的网址并且收到的数据很好。所以复制plunker应该在您的应用程序中正常工作:)