2016-09-28 81 views
3

嘗試覆蓋標頭的內容類型,但仍以text/plain格式顯示。有一種方法可以與Ben Nadel的GateWayAPI配合使用,但希望有一種不涉及自定義包裝的解決方案。Angular2 ES5 - 在HTTP POST報頭中覆蓋內容類型

var url = this.url; 
    var body = JSON.stringify({email_login: "login", password_login: "password"}); 
    var headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }); 


    return this.http.post(url, body, {headers:headers}) 
     .map(function (response) { 
      return response.json(); 
     }) 
     .catch(this.handleError); 

回答

1

如何使用append函數:

let headers = new Headers(); 
headers.append("Content-Type", "application/x-www-form-urlencoded"); 
+0

我也嘗試過,沒有運氣。 – kaotik

1

請求Httppost具有以下特徵:

post(url: string, body: any, options?: RequestOptionsArgs) 

第三個參數是RequestOptionsArgs類型,這意味着你必須參數將RequestOptions傳遞給它,而不是Headers。您還應該使用箭頭符號(=>)而不是function。你所尋找的是這樣的:

result: any; 

httpPostTest() { 

var url = this.url; 
var body = JSON.stringify({email_login: "login", password_login: "password"}); 

let headers: Headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded' }); 
let options: RequestOptions = new RequestOptions({ headers: headers }); 

this.http.post(url, body, options) 
    .map(response => { 
     response = response.json(); 
    }) 
    .catch(this.handleError); 
} 

在此之後,你需要使用訂閱獲得response,讓我們說,這個函數被調用httpPostTest(我會添加它上面),我們希望在可變存儲響應稱爲result

this.httpPostTest().subscribe(
      response => { this.result = response; }, 
      error => { console.log('ERROR'); }, 
      () => { console.log('FINISHED')} 
); 
+0

嘗試了它,得到以下錯誤:EXCEPTION:未捕獲(承諾):ReferenceError:RequestOptions未定義。
出於某種原因,我創建了一個新的Headers()obj,但不是新的RequestOptions()obj,儘管它們都可用於Angular的http.umd.js文件中。

app.TestService = function(http){this.http = http;};
app.TestService.parameters = [ng.http.Http];
app.TestService.prototype.getData = function(){var headers = new Headers({'Content-Type':'application/x-www-form-urlencoded'}); var options = new RequestOptions({headers:headers }); – kaotik

+1

@kaotik什麼是錯誤? –

+0

@kaotik您是否導入了'RequestOptions'?像這樣:'@ angular/http「的import {RequestOptions,Http,Headers};' –

0

您應該創建RequestOptions類和使用字符串而非JSON對象的實例作爲您使用窗體-urlencoded:

var body = "email_login=login&password_login=password"; 
var headers = new Headers(); 
headers.append('Content-Type', 'application/x-www-form-urlencoded'); 
let options = new RequestOptions({ headers: headers }); 
this.http.post(url, body, options);