在angular2 http服务中清空json()。数据

时间:2016-07-06 17:59:45

标签: json asp.net-mvc angular

我在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?

2 个答案:

答案 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未定义的原因。