Angular2 http.get()总是给404
我想从文件中加载一个虚拟json数据,但它好像是angular2 http.get方法不能挑选它。每次它给资源不可用与404状态。我正在使用下面的代码。Angular2 http.get()总是给404
const obs: Observable<any> = this.http.get('http://localhost:4200/assets/mock-json/cashback.json')
.map((res: Response) => {
console.log('***********',res.json());
res.json(); })
.do((res) => this.loadedCB = res);
if (this.loadedCB) {
return Observable.of(this.loadedCB);
}
即使当我在浏览器中手动尝试URL http://localhost:4200/assets/mock-json/cashback.json它的作品。无法弄清楚为什么它不能与http.get()一起工作。
这个问题可能发生,因为你从不订阅observable,所以它可能会启动它的执行,因此你不会得到任何结果,因为请求没有发送(你可以检查在网络选项卡中一些网络检查员)。
您应该尝试订阅observable,以便它可以启动它的执行。
例子:
export class AppComponent implements OnInit {
loadedCB: any;
constructor(public http: Http) {
}
ngOnInit() {
this.tryAndLoad();
}
tryAndLoad() {
this.load().subscribe((res: any) => {
this.loadedCB = res;
if (this.loadedCB) {
console.log(this.loadedCB);
return Observable.of(this.loadedCB);
}
});
}
load() {
return this.http.get('http://localhost:4200/assets/mock-json/cashback.json')
.map((res: Response) => {
console.log('***********', res);
return res.json();
})
}
}
其正确返回一个结果,然后你可以做任何你想要的价值,因为你是返回一个可观察的,你可以做别的事情(本演示不处理)
还添加进口'rxjs/Rx';到页面的顶部,以便您不要得到this.http.get(...)。地图错误
我试过这个,我发现它在浏览器的网络选项卡,以及状态码304,而且我收到错误消息**无法读取未定义**的属性'订阅'。请在下面找到我的代码:this.http.get('url') .map((res:Response)=> {console.log('***********',res.json ()); res.json();}) .subscribe((resp:any)=> {this.loadedCB = resp; if(this.loadedCB){ obs = Observable.of(this.loadedCB ); } });'可观察的变量仍然未定义 – AriSan
@AriSan,你需要实际返回**响应,所以:'.map((res:Response)=> {console.log ('***********',res.json()); return res.json();})' – Alex
尝试删除域,就像'/assets/mock-json/cashback.json ' –
您的角度应用程序是否在后端运行在相同的端口(:4200)上? –
在开发工具中,您是否看到请求? – acdcjunior