我在aspnet web api中有一个简单的方法,有以下测试结果:
$ curl localhost:5000/Api/GetAllQuestions
[{"questionId":0,"value":"qqq","answers":[{"answerId":25,"value":"qwerty"}]}]
在angular2 http服务中出现问题:
GetQuestions(): Observable<Question[]> {
return this.http.get("Api/GetAllQuestions")
.map(this.extractData)
.catch(this.handleError);
}
private extractData(res: Response) {
let body = res.json();
console.log(res.json()[0]);
return body.data || {};
}
因为它每次都返回{},但在控制台日志中我有一些预期的结果:
Object { questionId: 0, value: "qqq", answers: Array[1] }
我做错了什么,如何成功解析JSON?
答案 0 :(得分:2)
您的extractData
方法存在问题。 res.json
方法返回响应的有效负载:
private extractData(res: Response) {
let body = res.json();
return body || {}; // <------
}
如果你有这样的响应有效载荷,你可以返回body.data
:
{
data: [
{
"questionId":0,"value":"qqq","answers": [
{"answerId":25,"value":"qwerty"}
]
}
]
}
答案 1 :(得分:1)
我假设您使用角度文档作为参考。我是对的吗?
body.data期望Http响应包含这样的属性。因此,如果你的api返回一个不同的对象,它将无法正常工作。
查看角度文档中的内容,右下方您从中获取了代码段:
不要假设服务器API。并非所有服务器都返回 具有数据属性的对象。
所以这就是.data未定义的原因。