Угловой 2 http.post() не отправляет запрос


когда я делаю запрос post угловой 2 http не отправляет этот запрос

this.http.post(this.adminUsersControllerRoute, JSON.stringify(user), this.getRequestOptions())

http post не отправляется на сервер, но если я сделаю запрос, как это

this.http.post(this.adminUsersControllerRoute, JSON.stringify(user), this.getRequestOptions()).subscribe(r=>{});

это и если это может кто-нибудь объяснить мне, почему ? Или это баг ?

3 71

3 ответа:

С post метод Http класс возвращает observable вам нужно подписаться на него, чтобы выполнить его обработку инициализации. Наблюдаемые ленивы.

вы должны взглянуть на это видео, Подробнее:

метод Get не требует использования метода subscribe, но для метода post требуется подписка. Получите и вывесьте коды образца ниже.

import { Component, OnInit } from '@angular/core'
import { Http, RequestOptions, Headers } from '@angular/http'
import 'rxjs/add/operator/map'
import 'rxjs/add/operator/catch'
import { Post } from './model/post'
import { Observable } from "rxjs/Observable";

@Component({
    templateUrl: './test.html',
    selector: 'test'
})
export class NgFor implements OnInit {

    posts: Observable<Post[]>
    model: Post = new Post()

    /**
     *
     */
    constructor(private http: Http) {

    }

    ngOnInit(){
        this.list()
    }

    private list(){
        this.posts = this.http.get("http://localhost:3000/posts").map((val, i) => <Post[]>val.json())
    }

    public addNewRecord(){
        let bodyString = JSON.stringify(this.model); // Stringify payload
        let headers      = new Headers({ 'Content-Type': 'application/json' }); // ... Set content type to JSON
        let options       = new RequestOptions({ headers: headers }); // Create a request option

        this.http.post("http://localhost:3000/posts", this.model, options) // ...using post request
                         .map(res => res.json()) // ...and calling .json() on the response to return data
                         .catch((error:any) => Observable.throw(error.json().error || 'Server error')) //...errors if
                         .subscribe();
    }
}

вы должны подписаться на возвращенный observable, если вы хотите, чтобы вызов выполнялся.

см. также документация по HTTP.

всегда подписаться!

An HttpClient метод не начинает свой HTTP-запрос, пока вы не вызовете subscribe () на observable, возвращенном этим методом. Это верно для всех HttpClient методы.

The AsyncPipe подписывается (и отписывается) для вас автоматически.

все наблюдаемые возвращаются из HttpClient методы холод дизайн. Выполнение HTTP-запроса отложить, что позволяет расширить наблюдаемое с помощью дополнительных операций, таких как tap и catchError прежде чем что-нибудь на самом деле произойдет.

вызов subscribe(...) запускает выполнение наблюдаемого и вызывает HttpClient для составления и отправки HTTP-запроса на сервер.

вы можете думать о эти параметры, как проектов для реальных HTTP-запросов.