2014-09-05 7 views
1

Так что я занят веб-приложением, и теперь я застрял в синтаксическом анализе объекта. То, что я только что пытался сделать, это получить идентификатор всех результатов, но он дает мне неопределенное обратно на консоль.Угловой не отображать объект

Что я попробовать:

var app = angular.module("DB", []); 

    app.controller("Controller", function($scope, $http) { 
     $http.defaults.headers.common["Accept"] = "application/json"; 
     $http.get('api_url'). 

     success(function(data, status, headers, config) { 
      $scope.games = data.results; 
      $scope.id = data.results.id; 
     //Do i need a foreach here because it doesn't loop through all records and it gives me undefined. 

     $http.get('http:/api/id/' + $scope.id + '?api_key=', function(e){ 

     }). 
      success(function(data, status, headers, config) { 
      $scope.details = data; 
      console.log(data); 
      //this returns the complete JSON 
      }); 
     }). 
     error(function(data, status, headers, config) { 
      //handle errors 
     }); 
    }); 

первый http.get петли через JSON как:

"results": [ 
    { 
    "easy": false, 
    "id": 1, 
    "title": "title", 
    }, 
    { 
    "easy": false, 
    "id": 2, 
    "title": "title", 
    }, 
    { 
    "easy": true, 
    "id": 2, 
    "title": "title", 
    } 
] 

и то, что вторая по потребности, чтобы сделать, это получить все идентификаторов от JSON и начать новую ПОЛУЧАЕТЕ:

$http.get('http:/api/id/' + $scope.id + '?api_key=', function(e){ 

}). 
    success(function(data, status, headers, config) { 
    $scope.details = data; 
    console.log(data.data); 
    }); 
}) 

проблема в том, что есть, что $scope.id = data.results.id; не returing ничего делать Мне нужен foreach или что-то, что нужно пропустить?

И отображая его я действительно пробовал:

<div ng-repeat="detail in details"> 
    {{ detail }} 
    {{ detail.adult }} 
</div> 

, но ничего не отображается (FYI я изменил $ scope.id = data.results.id, до $ scope.id = data.results [0 ] .id; проверить его)

JSON для второго GET выглядит следующим образом:

{ 
    "adult": false, 
    "collection": { 
    "id": 131295, 
    "name": "Collection", 
    }, 
    "levels": [{ 
    "id": 28 
    }, { 
    "id": 12 
    }, { 
    "id": 878 
    }], 
    "homepage": "google", 
    "id": 100402, 
    "overview": "lorem ipsum" 
} 

я не могу получить доступ к объекту с {{detail.adult}}, например.

+0

Вы взаимодействующий с RESTful лица? – Josep

ответ

2

Причина, по которой data.results.id ничего не возвращает, потому что data.results - это массив объектов. Если то, что вы хотите является массив с идентификаторами объектов data.results вы могли бы сделать это следующим образом:

var resultIDs = data.results.map(function(result){return result.id;}); 

Я не уверен, но я думаю, что это то, что вы хотите:

var app = angular.module("DB", []); 

app.controller("Controller", function($scope, $http) { 
    $scope.details = []; 
    $http.defaults.headers.common["Accept"] = "application/json"; 
    $http.get('api_url'). 
    success(function(data, status, headers, config) { 
     $scope.games = data.results; 
     for(var i =0;i<$scope.games.lenght;i++){ 
     $http.get('http:/api/id/' + $scope.games[i].id + '?api_key=', function(e){ 

      }). 
      success(function(data, status, headers, config) { 
       $scope.details.push(data); 
      }); 
     } 
    }). 
    error(function(data, status, headers, config) { 
     //handle errors 
    }); 
}); 

Однако Я бы проверить, есть ли API, который вы используете, метод, который принимает массив идентификаторов вместо одного идентификатора, так что вам не нужно так перебирать.

Если этот API является RESTful сервис вы могли бы сделать это без перебора, как это:

var app = angular.module("DB", []); 

app.controller("Controller", function($scope, $http) { 
    $scope.details = []; 
    $http.defaults.headers.common["Accept"] = "application/json"; 
    $http.get('api_url'). 
    success(function(data, status, headers, config) { 
     $scope.games = data.results; 
     var resultIDs = data.results.map(function(result){return result.id;}); 
     $http.get('http:/api?id=' + resultIDs.join(',') + '?api_key=', function(e){ 

     }). 
     success(function(data, status, headers, config) { 
      $scope.details = data; 
     }); 
    }). 
    error(function(data, status, headers, config) { 
     //handle errors 
    }); 
}); 
+0

Привет @Josep, спасибо. Теперь я получаю все идентификаторы в массиве, но я хочу, чтобы '$ http.get ('http:/api/id /' + $ scope.id + '? Api_key =', function (e) { '$ scope.id заменяется идентификатором, поэтому я могу получить доступ к данным в этом файле JSON – Frenck

+0

@Frenck Я обновил ответ, дайте мне знать, если это то, что вы искали, спасибо! – Josep

+0

большое спасибо это помогло мне в правильном направлении. Единственное, что я получил ошибку с результатом.length, я думаю, 'ReferenceError: результаты не определены' – Frenck

Смежные вопросы