Angular2发布到Web服务

时间:2016-05-02 12:26:56

标签: web-services post angular ionic2

 $("#example").empty();

我正在尝试使用Ionic2和Angular2 beta向Ruby on Rails Web服务发布消息。 Web服务工作正常,问题是离子应用程序似乎正在发布消息。 这看起来不错吗?

2 个答案:

答案 0 :(得分:3)

您需要subscribe()否则不会发送任何请求

send(subject, body)
{
    var body = "subject=" + subject + "&body=" + body;

    let result = this.http.post('http://172.16.2.115:3004/message',
        body, 
        {
            headers: this.headers
        })
    .subscribe(res => {
      this.comments = res.json();
      console.log(body);
      console.log(this._apiUrl);

      // no effect here
      // return result;             
    });  
}

您需要将处理repsonse的代码移动到subscribe(),否则它将在响应到达之前执行。 您无法返回结果,您只能返回可供其他人订阅的observable。

send(subject, body)
{
    var body = "subject=" + subject + "&body=" + body;

    return this.http.post('http://172.16.2.115:3004/message',
        body, 
        {
            headers: this.headers
        });
    .map(res => {
      this.comments = res.json();
    });  
}
this.send.subscribe(res => {
   console.log(body);
   console.log(this._apiUrl);
});

答案 1 :(得分:0)

你需要订阅observable才能使它执行,因为observable是懒惰的。

如果要将结果返回给调用者,可以在调用方法中进行订阅。不要忘记请求是异步执行的,因此您将在subscribe方法中指定的回调中收到响应数据。

this.service.send(asunto, cuerpo).subscribe((result) => { // <------
  // do something with the result
});

在这种情况下,send方法可以保持不变:

send(asunto, cuerpo) {
  var body = "subject=" + asunto + "&body=" + cuerpo;

  return this.http.post(this._apiUrl,
    body, {
        headers: this.headers
    }).map(res => res.json());
}

如果您对如何组织代码以与HTTP服务进行交互感兴趣,可以查看以下问题:

此外,您可以利用URLSearchParams类来填充表单内容:

let content = new URLSearchParams();
content.set('subject', asunto);
content.set('body', cuerpo);

var inputPayload = content.toString();