2017-05-17 12 views
0

私はAngp4とAsp.net web apiを組み合わせて使用​​しています。私は自分の反応の性質をどう読むことができるのか分かりません。角度4 Http投稿に応答を入れてください

私の応答が好きになります。このResponse

私のポストの要求:

postLogin(values: string): Observable<string> { 
    let body = "[email protected]&password=Test1234!&grant_type=password"; 
    /*let body = values + "&grant_type=password";*/ 
    let headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded'}); 
    let options = new RequestOptions({headers: headers}); 

    return this._http.post(this._postLoginUrl, body, options) 
     .catch(this.handleError); 
    } 

そして、私の実際のポストメソッドを呼び出します。

this._loginService.postLogin(value) 
     .subscribe(
      data => console.log(data), 
      err => console.log(err)); 

そして、これは仕事、私は入手できますかん私のコンソールの応答Response

しかし、どのように私のプロパティを読むことができますか?

UPDATE

私は少し私のコードを更新しましたが、私がしたいように、それはまだ動作しません、私は、ドキュメントを読んでいたが、私はまだ、さらに得ることができませんでした。 postメソッドへ

私の新しいコール:

console.log("username=" + this.username + "&password=" + this.password); 
    this._loginService.postLogin("username=" + this.username + "&password=" + this.password) 
    .subscribe(
     user => this.user = user), 
     err => console.log(err); 

そして、私の新しいポストの要求:

private extractData(res: Response) { 
    let body = res.json(); 
    return body.fields || {}; 
    } 

extractData機能などで

postLogin(values: string): Observable<User> { 
    let body = values + "&grant_type=password"; 
    let headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded'}); 
    let options = new RequestOptions({headers: headers}); 

    return this._http.post(this._postLoginUrl, body, options) 
     .map(this.extractData) 
     .catch(this.handleError); 
    } 

私はのコンソールログを行う場合私のユーザーオブジェクトは今、私は未定義と私はユーザーのプロパティにアクセスしようとすると、私のブラウザがリフレッシュを開始します。私が間違っていること、なぜ私のデータにアクセスできないのですか?

+1

ドキュメントを読んでくださいにアクセスすることができます。何fieldsがないので、したがって、あなただけの実際の応答を返す必要があります。 – jonrsharpe

+1

あなたの答えは次のとおりです:https://angular.io/docs/ts/latest/guide/server-communication.html#!#extract-data :)しかし、私は*非常にお勧めします全体を読んで;) – Alex

+1

言ったように、ドキュメントを読む! POSTメソッドに関係なく、JSONレスポンスを解析する必要があります。これはサービスの戻り値でここで行います。戻り値this._http.post(this._postLoginUrl、body、options).map(res => res.json()) ' – joh04667

答えて

1

使用

JSON.parse(data._body) 

これはあなたのレスポンスオブジェクトを提供します。

1

あなたの応答からもわかるように、

{"access_token":"blaablaa", .... } 

そこにあなたが受信しているデータ内の任意fieldsはありませんが、プロパティを持つ「だけ」オブジェクト。

private extractData(res: Response) { 
    let body = res.json(); 
    return body || {}; // remove 'fields' 
} 

を、あなたのデータを受信して​​いるとき、あなたは簡単にフィールド

this._loginService.postLogin(value) 
    .subscribe(data => { 
     console.log(data.access_token) // your access_token 
    }) 
関連する問題