2016-09-28 85 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);