環境:
首先本人在撰寫Angular2 的小專案遇到一個就是在Firefox上面透過Observable 的subscribe後 Rest api的 response內容在 Observable.map()內的method response.json()會產生錯誤。
呼叫 http.post service的 code 為
但是你會發現在 Chrome上面 Server 回傳的內容是能夠正常透過angular Response提供的.json() method轉成 json物件。不過到了Firefox則出現錯誤。
然後仔細去看Server回給Firefox的內容卻是 HTML!!
後來比對Chrome送出的header與response的內容發現兩邊的差別在於Header部份Accept 為application/json。
所以解決方式就是在發 http.post那邊的header多加上 'Accept': 'application/json' 就可以讓Firefox可以拿到正常的response 內容:
- Browser : firefox 50.0.2
- angular2 : 2.1.0
- angular-cli: 1.0.0-beta.20-4
- node: 4.4.3
- os : linux x64 Kubuntu 16.04
- Rest Api Server: Django 1.9 + django restframework 3.4.7
首先本人在撰寫Angular2 的小專案遇到一個就是在Firefox上面透過Observable 的subscribe後 Rest api的 response內容在 Observable.map()內的method response.json()會產生錯誤。
呼叫 http.post service的 code 為
getUserList(): Observable這邊按照angular2官網說明的post是這樣子下。{ // post rest api let headers = new Headers({ 'Content-Type': 'application/json'}); let options = new RequestOptions({ headers: headers }); return this.http.post( this.url.userListUrl, '', options ) .map( (res: Response) => res.json() ).catch(this.handleError); }
但是你會發現在 Chrome上面 Server 回傳的內容是能夠正常透過angular Response提供的.json() method轉成 json物件。不過到了Firefox則出現錯誤。
然後仔細去看Server回給Firefox的內容卻是 HTML!!
後來比對Chrome送出的header與response的內容發現兩邊的差別在於Header部份Accept 為application/json。
所以解決方式就是在發 http.post那邊的header多加上 'Accept': 'application/json' 就可以讓Firefox可以拿到正常的response 內容:
getUserList(): Observable這個問題卡了好久,希望有遇到這個問題的人可以試試看。{ // post rest api let headers = new Headers({ 'Content-Type': 'application/json', 'Accept': 'application/json' }); let options = new RequestOptions({ headers: headers }); return this.http.post( this.url.userListUrl, '', options ) .map( (res: Response) => res.json() ).catch(this.handleError); }
留言
張貼留言