Угловой 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 ответа:
С
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-запросов.