2016-06-26 5 views
2

Ich benutze Winkel 2, um eine Anfrage zu bekommen und eine Anfrage zu machen. Meine Anfrage geht gut, aber für meinen Beitrag, Ich sehe nicht, die Anfrage wird bei der Überprüfung meiner Firebug Net-Panel gemacht.Angular 2 HTTP-Post-Anfrage wird nicht aufgerufen

Die Code-Methoden sehen wie folgt aus. Ich habe auch Subscribe-Methoden, die sie aus einer Komponentenklasse aufrufen.

import {Injectable} from "angular2/core"; 
import {Http, Response, Headers, RequestOptions, Jsonp, URLSearchParams} from "angular2/http"; 
import { Observable }  from 'rxjs/Observable'; 
import 'rxjs/add/operator/map'; 

@Injectable() 
export class MyService{ 
    constructor (private _http: Http){} 


testPost(){  

    var json = JSON.stringify({"userId": 111, "givenName": "CZ"}); 
    var body = "json="+json; 
    var headers = new Headers({ 'Content-Type': 'application/json' }); 
    var options = new RequestOptions({ headers: headers }); 

    return this._http.post("http://mylocal.post.url", body, options) 
     .map(this.extractData) 
     .catch(this.handleError); 

} 

    private extractData(res: Response) { 
    alert("test whether this method is reached"); 

    let body = res.json(); 
    return body.data || { }; 
    } 

    private handleError (error: any) { 
    alert("test whether this method is reached"); 

    let errMsg = (error.message) ? error.message : 
     error.status ? `${error.status} - ${error.statusText}` : 'Server error'; 
    console.error(errMsg); // log to console instead 
    return Observable.throw(errMsg); 
    }  

//testGet method is running well 
testGet(link:string){ 

    return this._http.get(link) 
    .map(res => res); 

}  
} 

meine abonnierende Methode onTestPost(), die einer Schaltfläche auf der Seite zugeordnet ist.

onTestPost(){ 
    this.myService.testPost() 
    .subscribe(
     data => this.getData = JSON.stringify(data), 
     error => alert(error), 
     () => console.log("Finished")    
     ); 
} 

Ich legte eine Warnung-Anweisung am Anfang von zwei Hilfsmethoden. Keine der Warnungen ist erreicht. Und ich sehe keine Anfrage an meine lokale Post-URL beim Debuggen mit Firebug.

Während meine testGet-Methode korrekt funktioniert, weiß ich nicht, was für die testPost fehlt.

+0

Der Code sieht in Ordnung, die meisten wahrscheinlich, dass Sie nicht wirklich richtig abonniert haben. – dfsq

+0

Nur für den Fall, dass etwas wie ein Mock-Backend die Anfrage nicht abfängt. –

Antwort

10

Ich denke, Ihre Subskribierten Methoden sind das Problem hier. Bitte stellen Sie sicher, dass subscribe aufgerufen wird.

"Dieses Observable ist kalt, was bedeutet, dass die Anfrage nicht ausgehen wird, bis etwas zu dem Observablen abonniert."

Siehe https://angular.io/docs/ts/latest/guide/server-communication.html

+0

Danke für Ihre Antwort! – ChrisZ

+0

Ich habe meine Anmeldemethode hinzugefügt. Ich glaube jedoch, dass meine Service-Methode testPost() aufgerufen wurde. Ich habe eine Alarmmeldung abgegeben. Es demonstrierte die Codes vor der Rückkehr-Anweisung durchlaufen werden. – ChrisZ

+0

Ich wünschte, ich hätte diese Antwort früher gesehen. haben den ganzen Tag vergeudet Problem auszugraben. – mehta

0
testPost() : Observable <Response> //import{Response} from '@angular/http' 
{  
var json = JSON.stringify({"userId": 111, "givenName": "CZ"}); 
var headers = new Headers({ 'Content-Type': 'application/json' }); 
var options = new RequestOptions({ headers: headers }); 
return this._http.post("http://mylocal.post.url/api",JSON.stringify(json), options) 
    .map((res:Response)=>res.json()) 
    .catch(this.handleError); 
}