2017-06-21 115 views
0

我想从文件中加载一个虚拟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()一起工作。

+0

尝试删除域,就像'/assets/mock-json/cashback.json ' –

+0

您的角度应用程序是否在后端运行在相同的端口(:4200)上? –

+0

在开发工具中,您是否看到请求? – acdcjunior

回答

0

这个问题可能发生,因为你从不订阅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(); 
     }) 
    } 
} 

其正确返回一个结果,然后你可以做任何你想要的价值,因为你是返回一个可观察的,你可以做别的事情(本演示不处理)

enter image description here

enter image description here

还添加进口'rxjs/Rx';到页面的顶部,以便您不要得到this.http.get(...)。地图错误

+0

我试过这个,我发现它在浏览器的网络选项卡,以及状态码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

+0

@AriSan,你需要实际返回**响应,所以:'.map((res:Response)=> {console.log ('***********',res.json()); return res.json();})' – Alex