2016-11-02 5 views
-3

AngularJSを使用してネストされたJSONを読み込もうとしています。AngularJSを使用して入れ子になったJSONを読み取る方法は?

{ 
    "results": [ 
    { 
     "id": "D1", 
     "name": "A", 
    }, 
    { 
     "id": "D2", 
     "name": "B", 
    } 
    ] 
} 

以下は、私はそれが未定義の値を与えるJSONを読み取るしようとするフォーム[対象オブジェクト] にPHPからJSONデータを取得AngularJSコントローラである:以下は、ネストされたJSONあります。

function MyController($scope, $http) { 
    $http({ 
     method: 'GET', 
     data: "action=0", 
     url: 'a.php' 
    }).then(function(data) { 
     alert("Hello" +data); //alerts Hello[object Object] 
     $scope.legs = data.results; 
     alert($scope.legs);  //alerts undefined 
    }); 

} 

JSONを印刷しようとしているhtmlコードは次のとおりです。$ HTTPはあなたがの結果として直接応答体を得ることはありませんhttps://docs.angularjs.org/api/ng/service/$http

でどのように機能するかあなたがチェックすることができ

<tr ng-repeat="l in legs"> 
    <td>{{ l.id }}</td> 
</tr> 
+0

'' alert( "Hello"、data); ''オブジェクトの文字列化されたバージョンは得られません – Kevin

+2

ここで 'output'が定義されていますか? httpコールバックに 'data.results'が必要なのでしょうか? –

+0

ここから出力は何ですか? – Nitheesh

答えて

0

お約束すると、HTTPリクエストに関する詳細情報を持つオブジェクトが取得され、dataプロパティにアクセスする必要があります。

function MyController($scope, $http) { 
    $http({ 
     method: 'GET', 
     data: "action=0", 
     url: 'a.php' 
    }).then(function(response) { 
     $scope.legs = response.data.results; 
    }); 

} 

応答変換を有効にするために、サーバーがJSON用の応答ヘッダーを正しく設定していると仮定しています。

+0

response.dataを処理しない場合は、**。**の代わりに**。success **を使用できます。 _data_を直接あなたに与えます。 – Tobi

+3

@Tobi *** '$ http'の伝統的な約束事のメソッド' success'と 'error'は非難されました。代わりに標準の 'then'メソッドを使用してください。*** https://code.angularjs.org/1.5.8/docs/api/ng/service/$http#deprecation-notice – deceze

+0

良い点、私は同意します! – Tobi

0

$ HTTPをよく読んでください、ここで約束:https://docs.angularjs.org/api/ng/service/ $ HTTP

あなたがsuccessCallbackが応答ではなく、データそのものであるパラメータを持っていることがわかります。応答は、データを含むオブジェクトです。このオブジェクトからJSONデータを抽出する必要がありますデータ

は、このコードを変更します。

}).then(function(data) { 
    alert("Hello" +data); //alerts Hello[object Object] 
    $scope.legs = data.results; 
    alert($scope.legs);  //alerts undefined 
}); 

へ:

}).then(function(response) { 
    alert("Hello" + response.data); 
    $scope.legs = response.data.results; 
    alert($scope.legs); 
}); 

あなたの$ scope.legsは現在、JSONデータを持つことになります。 ng-repeatはうまくいくはずです。

関連する問題