Angular Http 订阅不工作

Angular Http Subscribe not working

您好,在我的 Angular 组件中,我的一个方法中有这段代码

this.http.get("http://localhost:8080/poeples")
.map(
    resp => { resp = resp.json(); }
).subscribe(
    (data) => { this.poeples = data; },
    err =>  console.log(err)
);

在 chrome 开发检查员的网络选项卡中,我看到我的 get 调用返回结果,但是 data 未定义。

为什么?

// 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)
  );

它最初不起作用的原因是因为你有这个:

resp => { resp = resp.json(); }

您没有return输入值。当您使用大括号时,您必须显式定义一个 return 值。您所要做的就是:

resp => { return resp.json(); }

或者去掉大括号:

resp => resp.json() 

错误 - 订阅请求成功代码无效。 这是我正在处理的代码

this.userService.addDeliverDetails(form.value) .subscribe( res=>{ this.have=true; }, error=>{ console.log('error') } );

尝试 console.log() 时出现错误,如果它被记录下来,则意味着您的数据来自服务器的文本格式未 JSON。

两种解决方案 1) 更改 angular 以接受文本回复 2) 将服务器响应更改为 json 而不是字符串(纯文本)