如何转换 http.post 响应 json 中的数据以便我可以在我的应用程序中使用它?

Ric*_*ard 2 javascript post json http angular

我对 Web 开发和 Angular 相当陌生,所以我确信我错过了一些明显的东西,但我无法弄清楚这一点。

这是相关代码:

@Component({
  selector: 'app-search-permits',

  templateUrl: 'search.permits.html',
})
export class SearchPermitsComponent {
  apiRoot: String = 'http://localhost:8080/pzapp-servlet';

  constructor(public http: Http) {}

  test() {
    console.log('GET');
    const url = `${this.apiRoot}/controlleretax?message=getMstx`;
    this.http.post(url, 'getMstx').subscribe(res => console.log(res.json()));
  }
}
Run Code Online (Sandbox Code Playgroud)

这会向我的浏览器控制台打印一个漂亮的 json。我想将 json 中的数据分配给一个对象(可能是 ArrayList?),这样我就可以在 html 中的表格中显示数据。

如果重要的话我正在使用 Angular Material2 表。

就像我说的,我对此很陌生,因此如果您可以具体说明甚至在您的回复中添加代码片段,我将非常感激。

谢谢

Deb*_*ahK 5

这是我的方法的样子,它通常在服务中:

服务

getMovies(): Observable<IMovie[]> {
    return this.http.get<IMovie[]>(this.moviesUrl)
                    .pipe(
                        tap(data => console.log(JSON.stringify(data))),
                        catchError(this.handleError)
                    );
}
Run Code Online (Sandbox Code Playgroud)

请注意方法返回类型以及return从方法返回 Observable 的语句。

成分

然后订阅在组件中如下所示:

getMovies(): void {
    this.movieService.getMovies()
        .subscribe(
            (movies: IMovie[]) => this.movies = movies,
            (error: any) => this.errorMessage = <any>error);
}
Run Code Online (Sandbox Code Playgroud)

或者

如果你不想搞乱这样的事情......你只需要声明并分配一个变量:

  permits: Permits[];

  test() {
    console.log('GET');
    const url = `${this.apiRoot}/controlleretax?message=getMstx`;
    this.http.post(url, 'getMstx').subscribe(res => {
         console.log(res.json());
         this.permits = res;
    });
  }
Run Code Online (Sandbox Code Playgroud)

  • 我使用第二种方法只是为了让某些东西发挥作用。我必须将最后一行更改为“this.permits = res.json();”,但这有效。谢谢!我会尝试将其更改为服务,因此这是最佳实践,但它现在正在运行。 (2认同)