Angular 2 的 http.post() 方法没有发送请求

23 浏览
0 Comments

Angular 2 的 http.post() 方法没有发送请求

当我发送一个post请求时,angular 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=>{});

这是故意的吗?如果是的话,有人能解释一下为什么吗?还是这是一个bug?

0
0 Comments

Angular 2 http.post() is not sending the request的问题出现的原因是post方法需要使用subscribe方法,而get方法不需要。解决方法是在http.post()方法后面添加.subscribe()。

以下是解决方法的代码:

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(); // Add subscribe method to send the request
}

这样就可以解决Angular 2 http.post() is not sending the request的问题了。

0
0 Comments

在使用Angular 2的http.post()方法发送请求时,出现了请求没有发送的问题。解决这个问题的方法是需要订阅返回的Observable对象,这样才能执行调用。

根据Angular文档中的说明,对于所有的HttpClient方法,在调用subscribe()方法之前,方法不会发起HTTP请求。这适用于所有的HttpClient方法。

同时,我们需要在组件销毁的时候取消订阅Observable对象。

所有从HttpClient方法返回的Observable对象都是"cold"的,这是设计时的考虑。HTTP请求的执行是延迟的,这样可以让我们在实际发起请求之前,通过扩展Observable对象进行其他操作,比如使用tap和catchError方法。只有调用subscribe()方法才会触发Observable的执行,并导致HttpClient组合并发送HTTP请求到服务器上。

可以把这些Observable对象看作是实际HTTP请求的"蓝图"。

另外,每次调用subscribe()方法都会独立执行一个Observable对象,因此订阅两次会发起两个HTTP请求。

在相关的说明中,我们还了解到AsyncPipe会自动订阅和取消订阅Observable对象。

0
0 Comments

Angular 2的http.post()方法未发送请求的原因是因为需要订阅(subscribe)它返回的observable以执行初始化处理。Observables是惰性的。

解决方法是在http.post()方法后面添加.subscribe()来订阅这个observable。

以下是一个示例代码:

http.post(url, data)
  .subscribe(response => {
    // 处理响应数据
  }, error => {
    // 处理错误
  });

如果忘记订阅observable,请求将不会发送。

你可以查看这个视频了解更多细节:https://egghead.io/lessons/rxjs-rxjs-observables-vs-promises(需要会员才能观看)。

0