2016-05-02 6 views
2
constructor(platform: Platform, public http: Http) { 
    this.platform = platform; 
    this.headers = new Headers(); 
    this.headers.append('Content-Type', 'application/x-www-form-urlencoded'); 
} 



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 
     }); 


    console.log(body); 
    console.log(this._apiUrl); 

    return result;   
} 

Ich versuche, eine Nachricht an einen Ruby on Rails-Webdienst mit Ionic2 und Angular2 Beta zu senden. Der Web-Service funktioniert gut, das Problem ist, dass die ionische App scheint, die Nachricht zu veröffentlichen. Sieht das richtig aus?Angular2 Post zum Webservice

Antwort

3

Sie müssen subscribe() sonst wird keine Anfrage

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;    
    }); 
} 

Sie müssen den Code bewegen gesendet werden, die die repsonse in subscribe() verarbeitet Andernfalls wird es ausgeführt, bevor die Antwort eintrifft. Sie können das Ergebnis nicht zurückgeben, Sie können das Observable nur für eine andere Person zum Abonnieren zurückgeben.

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); 
}); 
+0

http://stackoverflow.com/questions/34515173/angular-2-http-get-with-typescript-error-http-get-map-is-not-a-function -in –

+0

also welcher code soll ich den ersten oder den letzten verwenden? dass du gepostet hast – Jon

+0

Das hängt davon ab, was du erreichen willst ;-). Wenn dieser Code in einem Service enthalten ist und Sie das Ergebnis in einer Komponente oder einem anderen Service erhalten möchten, passt der 2. Code besser. Wenn Sie nur den Wert in dem Dienst speichern möchten, der auch die Methode 'send()' enthält, können Sie auch den ersten verwenden. Ich denke, das 2. ist normalerweise das, was Sie wollen, weil es in beiden Fällen gut funktioniert. –

0

Sie müssen beobachtbaren abonnieren, um es seit Observablen faul sind, machen auszuführen.

Wenn Sie das Ergebnis an den Aufrufer zurückkehren möchten, können Sie innerhalb des Rufmethode abonnieren. Vergessen Sie nicht, dass die Anfrage asynchron ausgeführt wird, sodass Sie die Antwortdaten in dem in der subscribe-Methode angegebenen Rückruf erhalten.

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

In diesem Fall wird die send Methode kann gleich bleiben:

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

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

Wenn Sie daran interessiert, wie Sie Ihren Code organisieren mit einem HTTP-Dienst zu interagieren, können Sie einen Blick auf diese Frage:

Außerdem könnten Sie die URLSearchParams Klasse nutzen Sie Ihre Form Inhalte buld:

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

var inputPayload = content.toString();