Observable不返回api响应

时间:2018-05-21 12:40:07

标签: php angular api

我是棱角分明的新人。 我的项目是angular5,我正在使用PHP创建的Web API。 我的WebApi在postman中给出了响应,但不是来自angular。 我正在使用HttpClient发布请求

    export class GalleryComponent implements OnInit {
      private apiUrl = 'http://localhost:8080/fullpath';
      private response;
      private data=[];

      constructor(private http: HttpClient) {
        this.response =this.getCategory();
      }

      getCategory (): Observable<any> {
        return this.http.post(this.apiUrl,{});
      }

      ngOnInit() {
       console.log(this.response);
      }
  }

我的控制台返回 enter image description here

我需要做些什么来从API获得适当的响应?

4 个答案:

答案 0 :(得分:0)

你可以尝试这个解决方案

 ngOnInit() {
   this.getCategory().subscribe(response => {
       console.log(response);
    }, err => {
       console.log(err);
    });
}

答案 1 :(得分:0)

您需要订阅一个Observable才能使用它。

而不是这个

private http: HttpClient) {
    this.response =this.getCategory();
}

试试这个

private http: HttpClient) {
    this.getCategory().subscribe(result => this.responce = result);
}

答案 2 :(得分:0)

使用Observable时,您必须订阅它们。  observable的实际用户需要subscribe(),因为没有  subscribe()observable根本不会被执行。

subscribe()返回无法订阅的订阅,但可用于取消订阅。

 getCategory (): Observable<any> {
      return this.http.post(this.apiUrl,{}).subscribe(
         //Do whatever
        (res)=> console.log(res), 
        (error)=> console.log(error)
      );
    }

有关更多信息,请访问Observables的Angular文档: https://angular.io/guide/observables

另外,请记住,大多数订阅都是自行终止的,但使用ngOnDestroy();终止它们总是很好的做法,以避免内存泄漏。

如何使用ngDestroy()? 在你的component.ts文件中 确保您有导入

import { Component, OnDestroy, OnInit } from '@angular/core';
export class YourComponent implements OnInit, OnDestroy {
 .
 .
 .
 ngOnDestroy() {
   this.response.unsubscribe();
  }
}

现在,与您的CORS问题相关,请参考之前在stackoverflow上提出的问题: Response to preflight request doesn't pass access control check

答案 3 :(得分:0)

大!你可以试试

this.getCategory().subscribe(
    response => console.log(response),
    err => console.log(err)
);

但是使用它的最佳方式是,您需要为POST请求创建服务,并且您只需将其称为im component。像那样

getCategory(data: any): Observable<any> {
 return this._http.post(`url`, JSON.stringify(data))
}

并在组件

中使用它
this.categoryService.getCategory(data).subscribe(
 data => console.log(data),
 err => console.log(err)
)

您可以使用Google DevTools查看是否符合请求,并查看请求响应!在network!如果问题是CORS,您需要在服务器中设置CORS域! 试试看,告诉我是否有效!希望有所帮助!感谢