Angular 2 http.post() nie wysyła żądania

Kiedy składam żądanie post, angular 2 http nie wysyła tego żądania

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

Post http nie jest wysyłany na serwer, ale jeśli złożę żądanie w ten sposób

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

Czy to jest zamierzone, a jeśli tak, czy ktoś może mi wyjaśnić dlaczego ? Czy to robak ?

Author: Nicu, 2016-03-24

3 answers

Ponieważ metoda post klasy Http zwraca obserwowalną, musisz ją zapisać, aby wykonać proces inicjalizacji. Obserwatorzy są leniwi.

Zobacz ten film, aby dowiedzieć się więcej:
 124
Author: Thierry Templier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-24 19:43:01

Metoda Get nie wymaga użycia metody subscribe, ale metoda post wymaga subcribe. Pobierz i po przykładowe kody są poniżej.

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();
    }
}
 23
Author: Murat ÖNER,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-01 20:47:33

Musisz zapisać się do zwracanego obserwowalnego, jeśli chcesz, aby wywołanie zostało wykonane.

Patrz również Dokumentacja Http.

Zawsze Subskrybuj!

Metoda HttpClient nie rozpoczyna żądania HTTP, dopóki nie wywołasz subscribe () na obserwowalnej zwracanej przez tę metodę. Dotyczy to wszystkich metod HttpClient.

AsyncPipe subskrybuje (i wypisuje się) dla ciebie automatycznie.

Wszystkie obserwacje zwrócone z HttpClient metody są zimne według projektu. Wykonanie żądania HTTP jest odroczone, co pozwala rozszerzyć obserwowalne o dodatkowe operacje, takie jak tap i catchError, zanim cokolwiek się stanie.

Wywołanie subscribe(...) wyzwala wykonanie observable i powoduje HttpClient skomponowanie i wysłanie żądania HTTP do serwera.

Możesz myśleć o tych obserwowalnych jako o schematach dla rzeczywistych żądań HTTP.

 18
Author: Igor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-27 10:42:30