Javascript 如何使用AngularJS读取嵌套JSON?

Javascript 如何使用AngularJS读取嵌套JSON?,javascript,angularjs,json,Javascript,Angularjs,Json,我正在尝试使用AngularJS读取嵌套JSON。以下是嵌套的JSON: { "results": [ { "id": "D1", "name": "A", }, { "id": "D2", "name": "B", } ] } 以下是AngularJS控制器,它以[object]的形式从PHP获取JSON数据 当我尝试读取JSON时,它给出了一个未定义的值 function MyController($s

我正在尝试使用AngularJS读取嵌套JSON。以下是嵌套的JSON:

{
  "results": [
    {
      "id": "D1",
      "name": "A",
    },
    {
      "id": "D2",
      "name": "B",
    }
  ]
}
以下是AngularJS控制器,它以[object]的形式从PHP获取JSON数据 当我尝试读取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代码是:

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

{{l.id}

您可以检查$http在中的工作方式

您不会因为承诺而直接获得响应正文,您将获得一个包含有关HTTP请求的更多信息的对象,要获取正文或数据,您应该访问其
数据
属性:

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

}

我假设您的服务器正确设置了JSON的响应头,以便激活响应转换。

请在此处阅读$http承诺:$http

您将看到successCallback有一个参数,它是响应,而不是数据本身。响应是包含数据的对象。您需要从这个对象数据中提取JSON数据

修改此代码:

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


您的$scope.legs现在将拥有JSON数据。ng重复应该可以正常工作。

尝试
警报(“你好”,数据)这样您就不会得到对象的字符串化版本,而
输出是在哪里定义的?您不想在http回调中使用
数据.results
?此处的输出是什么?如果您不想处理response.data,请更正变量。您可以使用。success代替。然后。这将直接向您提供数据。@Tobi已弃用了
$http
传统的promise方法
success
error
。改用标准的
然后
方法。当我发出警报
响应
时,它会发出警报
[object object]
。但是,当我在上述解决方案中提醒
$scope.legs
时,它会提醒
undefined
,PHP代码将返回的JSON头设置为
头('Content-Type:application/JSON')
}).then(function(response) {
    alert("Hello" + response.data);   
    $scope.legs = response.data.results;
    alert($scope.legs);
});