Angular 4 http在没有主体的PUT响应中抛出错误

Angular 4 http在没有主体的PUT响应中抛出错误

问题描述:

我正在使用Angular http模块v4.4.6。当Angular应用程序(客户端)正在向服务器发送PUT请求(使用HttpClient),并且服务器响应状态200(正常)而没有任何正文数据时,角度http模块会抛出​​3210。Angular 4 http在没有主体的PUT响应中抛出错误

这是一个正确的功能或错误?
如何在没有任何数据的情况下处理PUT响应?


详情:

在最近的版本我用正常Http模块和它的方法把()。在那里,我需要拨打res.json()以获取正文中的JSON数据。 put()方法返回Observable<Response>

现在我用新的HttpClient和它的put()方法。该方法返回Observable<Object>。看来json()方法在内部调用并导致我看到的错误。

  • Angular客户端使用HttpHeader创建PUT请求'Content-Type': 'application/json'。这导致HTTP PUT请求标头Accept:application/json, text/plain, */*)。
  • 服务器以状态200(OK)回答,并且在主体中没有任何数据。
  • Angular客户端收到答案并抛出错误。你是

HttpErrorResponse {headers: HttpHeaders, status: 200, ... error: error: SyntaxError: Unexpected end of JSON input at .. text: "" headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: ... message: "Http failure during parsing for ... name: "HttpErrorResponse" ok: false status: 200 statusText: "OK" url: ...

+1

您是否尝试https://angular.io/guide/http http .get('/ textfile.txt',{responseType:'text'}) // get()返回的Observable的类型是Observable //因为指定了文本响应。没有必要通过 // a 类型参数get()。 .subscribe(data => console.log(data)); – yonexbat

+1

https://angular.io/api/common/http/HttpClient#put – yonexbat

+0

目前我使用下面的语句:'const response = await this.http.put(this._serverUrl + url,data,options)。 toPromise()'。如果http来自'Http',则返回'Response',如果它来自'HttpClient',则返回body作为对象(期望在body内部有JSON)。 –

@yonexbat,由于权。

如果使用....

const response = this.http.put(url, data, { responseType: 'text'}).toPromise(); 

...问题解决。