我之前读过,如果您将responseType: "json"
标头添加到您的http请求中,那么我想添加它会更安全。
但是,当我使用它时,将响应视为JSON(即带点符号)时会出错。
例如,当我尝试如下获取json响应的属性:res.responseStatus
时,它将引发错误:
"Property 'responseStatus' does not exist on type 'Object'."
如果我从http请求中取出了responseType: "json"
标头,则不会出错。
如果我留在responseType
标头中,则可以通过以下符号获取响应中对象的属性:res["responseStatus"]
,并且这不会引发错误。
我只是想知道是否有人知道为什么。也许我想念一些东西。
谢谢
login(loginData): Observable<any>{
return this.http.post("http://localhost/api/auth",
{"emailAddress": loginData.emailAddress, "password": loginData.password},
{"headers": { "Content-Type": "application/json;charset=utf-8"}, responseType: "json"})
.map(res => {
if(res.responseStatus === "success"){
//Throwing error: "Property 'responseStatus' does not exist on type 'Object'."
//but If I say res["responseStatus"] instead this does not throw error.
//Or If I take out the responseType header, I can use the dot notation.
}
return res;
});
}
答案 0 :(得分:0)
我假设您使用的是HttpClient
。
您需要将observe: 'response'
添加到httpOptions
以获得完整的响应。
我还将res
的类型指定为HttpResponse
。正如乔恩(Jon)在评论中所提到的那样,如果您在observe: 'response'
中使用了httpOptions
,则并不是必须的。
此外,您将获得的是status
,而不是responseStatus
。
尝试一下:
login(loginData): Observable < any > {
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json;charset=utf-8'
}),
observe: 'response',
responseType: "json"
};
return this.http.post("http://localhost/api/auth", loginData, httpOptions)
.map((res: HttpResponse) => {
if (res.status === 200) {
...
}
return res;
});
}