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: ...
答
@yonexbat,由于权。
如果使用....
const response = this.http.put(url, data, { responseType: 'text'}).toPromise();
...问题解决。
您是否尝试https://angular.io/guide/http http .get('/ textfile.txt',{responseType:'text'}) // get()返回的Observable的类型是Observable //因为指定了文本响应。没有必要通过 // a 类型参数get()。 .subscribe(data => console.log(data)); –
yonexbat
https://angular.io/api/common/http/HttpClient#put – yonexbat
目前我使用下面的语句:'const response = await this.http.put(this._serverUrl + url,data,options)。 toPromise()'。如果http来自'Http',则返回'Response',如果它来自'HttpClient',则返回body作为对象(期望在body内部有JSON)。 –