2017-06-21 54 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