嗨在我的Angular组件中,我在我的一个方法中有这个代码
this.http.get("http://localhost:8080/poeples")
.map(
resp => { resp = resp.json(); }
).subscribe(
(data) => { this.poeples = data; },
err => console.log(err)
);
在chrome dev检查器的网络选项卡中,我看到我的调用返回结果,但data
未定义。
为什么?
答案 0 :(得分:2)
它原来不起作用的原因是因为你有这个:
resp => { resp = resp.json(); }
您没有返回值。使用花括号时,必须显式定义返回值。你所要做的就是:
resp => { return resp.json(); }
或删除大括号:
resp => resp.json()
答案 1 :(得分:1)
// Your code that isn't working:
/*this.http.get("http://localhost:8080/poeples")
.map(
resp => {
resp = resp.json()
}
).subscribe(
(data) => {
this.poeples = data;
},
err => console.log(err)) ;*/
// Working code:
@import { map } from 'rxjs/operators';
this.http.get('http://localhost:8080/poeples')
.pipe(
// In your example, you are creating a new function with the {} wrapped around this line, but you aren't returning anything, so the return value of the "data" below becomes "undefined."
map((response) => response.json())
)
.subscribe(
(data) => {
this.poeples = data;
},
(err) => console.log(err)
);
答案 2 :(得分:0)
错误-订阅请求成功代码不起作用时。 这是我正在处理的代码
this.userService.addDeliverDetails(form.value) 。订阅( res => { this.have = true; }, 错误=> { console.log('错误') } );
尝试错误地console.log(),如果它记录下来,则意味着您的数据来自服务器,其文本格式不是JSON格式。
两个解决方案1)更改角度以接受文本响应 2)将服务器对json的响应更改为不字符串(纯文本)