如何从宁静的服务中读取json一个对象数据

时间:2016-01-20 20:47:17

标签: angularjs

我正在尝试使用restful service从服务中读取数据。当我有一个json对象时,我遇到了问题。这是我的代码:

服务代码:

var ROAList =[];
var promise = $http.post(urlBase + '/' + 'getROAList', params)
                    .success(function (data) {
                        ROAList = data.item;
                        return ROAList;
                    })
                    .error(function (data) {                        
                        ROAList = 'error';
                        return ROAList;
                    });
            return promise;

在控制器中:

var list =[];
$scope.ROAListItem = function(){
    list =service.getROAList();
}

在html中:

<div ng-repeat="roa in list()" ng-click ="selectROAitem(roa.soa.name)">
  <div> {{roa.id}} </div>
 <div> {{roa.soa.name}}</div>  

这是我的json数据:

{"item": [
      {
      "id":"001",
      "type":"001x2z"
      "sao":       {
         "itemNo": "3",
         "name": "001"
      },
   },
      {
      "id":"002",
      "type":"002x2g"
      "sao":       {
         "itemNo": "5",
         "name": "006"
      }
]}

它适用于多个项目,但我收到一个项目的错误。对于这个json数据:

{"item":{
      "id":"001",
      "type":"001x2z"
      "sao":       {
         "itemNo": "3",
         "name": "001"
      }
}

对于这些数据,我发现无法读取属性&#39; name&#39;未定义的。

2 个答案:

答案 0 :(得分:0)

删除了冗长的回答。我没看到你的最后一节。您的多个返回都存储在一个数组中,而单个返回则不存储。因此单个对象的点访问不正确。

回应评论:再次,您应该真正格式化返回数据,使其始终在数组中,但否则您可以执行以下操作:

$scope.ROAListItem = function(){
    list = service.getROAList();
    if(!Array.isArray(list)){
      list = [list];
    }
}

答案 1 :(得分:0)

快速解决方案是修改您的服务电话,如下所示:

$http.post(urlBase + '/' + 'getROAList', params)
    .success(function (data) {
        ROAList = data.item;
        if (!angular.isArray(ROAList)) {
            ROAList = [ ROAList ];
        }
        return ROAList;
    })

但是,您的服务确实应该提供一致的行为,即使只有一个项目也会返回一个数组。