2016-10-16 6 views
0

私はフロントエンド部分としてAngular2サンプル "Tour of Heroes"とYii2フレームワークをAngular2(front)とYii2(end) - オプション 'Content-Type'を持つhttp.get: 'application/json'

<response> 
<item> 
<id>11</id> 
<name>Mr. Nice</name> 
<title>князь</title> 
</item> 
<item> 
<id>12</id> 
<name>Narco</name> 
<title>граф</title> 
</item> 
<item> 
<id>13</id> 
<name>Bombasto</name> 
<title>барон</title> 
</item> 

カールH 'Content-Typeの': 'アプリケーション/ JSON' 'http://server.local/heroes' はかなり正常に機能していると私はJSON

を取得yii2

<?php 
namespace app\controllers; 
use yii\rest\ActiveController; 
class HeroesController extends ActiveController 
{ 

    public $modelClass = 'app\models\Heroes'; 

    public function behaviors() 
    { 

     return  
     yii\helpers\ArrayHelper::merge(parent::behaviors(), [ 
      'corsFilter' => [ 
       'class' => \yii\filters\Cors::className(), 
      ], 
     ]); 
    } 
} 

結果(http://server.local/heroes)でバックエンド コントローラ

しかしAngular2ではこれを受け取ることができません。 http.getオプションのContent-Typeと ':' アプリケーション/ JSON

export class HeroService { 
    private headers = new Headers({'Content-Type': 'application/json'}); 
    private options = new RequestOptions({ headers: this.headers}); 
    private heroesUrl ='http://server.local/heroes';// 'app/heroes'; // URL  to web api 
    constructor(private http: Http) { } 
    getHeroes(): Promise<Hero[]> { 
       return this.http.get(this.heroesUrl, this.options  
    ) 
       .toPromise() 
       .then(response => response.json().data as Hero[]) 
       .catch(this.handleError); 
    } 

しかし、私は空の英雄[]

+0

いずれかをこのYii Response Formattingまたはこれを使用してお読みくださいブラウザのコンソールにエラーが表示されますか?要求が適切にdevのツールバーの[ネットワーク]タブから送信されているかどうかも確認できますか? –

+0

Chromeコンソールにエラーはありません – Leonid

答えて

1

を取得し、あなたのコントローラに

public function behaviors() 
    { 
     $behaviors = parent::behaviors(); 


     // add CORS filter 
     $behaviors['corsFilter'] = [ 
      'class' => \yii\filters\Cors::className(), 
      'cors' => [ 
       'Origin' => ['*'], 
       'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'], 
       'Access-Control-Request-Headers' => ['*'], 
      ], 

     ]; 
     $behaviors['contentNegotiator'] = [ 
      'class' => \yii\filters\ContentNegotiator::className(), 
      'formats' => [ 
       'application/json' => \yii\web\Response::FORMAT_JSON, 
      ], 
     ]; 
     return $behaviors; 
    } 
関連する問題