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

时间:2016-11-02 13:20:04

标签: javascript angularjs json

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

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

以下是AngularJS控制器,它以[object 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>

2 个答案:

答案 0 :(得分:0)

您可以查看$ http在https://docs.angularjs.org/api/ng/service/$http

中的工作原理

您没有直接获得响应主体作为承诺,您将获得一个包含有关HTTP请求的更多信息的对象,以获取您应该访问其p["unspiderfy"]属性的正文或数据:

        `var omsOptions = {
            keepSpiderfied: true,
            nearbyDistance: 100,
            DisableUnspiderfy: true
        };
        var oms;
        function drawSpiderMarkers(rows, options) {
            drawMarkers(rows, options); //This function draws markers by marker options
            if (!oms) {
                setTimeout(function() {
                    oms = new OverlappingMarkerSpiderfier(map, omsOptions);
                    for (var cachedMarkerIndex in cachedMarkers) {
                        oms.addMarker(cachedMarkers[cachedMarkerIndex]);
                    }
                    for (var cachedMarkerIndex in cachedMarkers) {
                        oms.spiderListener(cachedMarkers[cachedMarkerIndex]);
                    }
                }, 200);
            }
        }`

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

答案 1 :(得分:0)

请在此处阅读$ http promises: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应该可以正常工作。