Angular2 http.get()总是给404

时间:2017-06-21 14:08:37

标签: json angular http typescript observable

我正在尝试从文件加载虚拟json数据,但似乎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()一起使用。

1 个答案:

答案 0 :(得分:0)

这个问题可能会发生,因为你永远不会订阅observable以便它可以启动它的执行,因此你不会得到任何结果,因为请求没有被发送(你可以检查一下)在某些Web检查器的网络选项卡中)。

您应该尝试订阅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();
      })
  }
}

正确返回一个结果,然后你就可以用这个值做任何你想做的事情,因为你要返回一个observable你可以做其他事情(这个演示不能处理)

enter image description here

enter image description here

还要将导入&rxjs / Rx&#39 ;; 添加到页面顶部,以便您不会获得 this.http.get(...) .map 错误