$("#example").empty();
我正在尝试使用Ionic2和Angular2 beta向Ruby on Rails Web服务发布消息。 Web服务工作正常,问题是离子应用程序似乎正在发布消息。 这看起来不错吗?
答案 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();