Не могу получить данные из запроса

0

Я новичок в json и не могу правильно получить данные из запроса. У меня нет проблем с getDrivers(), но когда я пытаюсь получить данные из getDriverRaces($scope.id) я ничего не получаю. Я попытался сделать это вручную: http://ergast.com/api/f1/2015/drivers/hamilton/results.json?callback=JSON_CALLBACK и результат был - Изображение 174551

      angular.module('F1FeederApp.controllers', []).

  controller('driversController', function ($scope, ergastAPIservice) {
      $scope.nameFilter = null;
      $scope.driversList = [];
      $scope.searchFilter = function (driver) {
          var re = new RegExp($scope.nameFilter, 'i');
          return !$scope.nameFilter || re.test(driver.Driver.givenName) || re.test(driver.Driver.familyName);
      };

      ergastAPIservice.getDrivers().success(function (response) {
          $scope.driversList = response.MRData.StandingsTable.StandingsLists[0].DriverStandings;
      });
  }).

  controller('driverController', function ($scope, $routeParams, ergastAPIservice) {
      $scope.id = $routeParams.id;
      $scope.races = [];
      $scope.driver = null;

      ergastAPIservice.getDriverRaces($scope.id).success(function (response) {
          $scope.races = response.MRData.RaceTable.Races;
      });
  });

 <div class="main-content">
        <table class="result-table">
            <thead>
                <tr><th colspan="5">Formula 1 2015 Results</th></tr>
            </thead>
            <tbody>
                <tr>
                    <td>Round</td>
                    <td>Grand Prix</td>
                    <td>Team</td>
                    <td>Grid</td>
                    <td>Race</td>
                </tr>
                <tr ng-repeat="race in races">
                    <td>{{race.round}}</td>
                    <td>{{race.raceName}}</td>
                    <td>{{race.Results[0].Constructor.name}}</td>
                    <td>{{race.Results[0].grid}}</td>
                    <td>{{race.Results[0].position}}</td>
                </tr>
            </tbody>
        </table>
    </div>

angular.module('F1FeederApp.services', [])
  .factory('ergastAPIservice', function ($http) {

      var ergastAPI = {};

      ergastAPI.getDrivers = function () {
          return $http({
              method: 'JSONP',
              url: 'http://ergast.com/api/f1/2015/driverStandings.json?callback=JSON_CALLBACK'
          });
      }

      ergastAPI.getDriverRaces = function (id) {
          return $http({
              method: 'JSONP',
              url: 'http://ergast.com/api/f1/2015/drivers/' + id + '/results.json?callback=JSON_CALLBACK'
          });
      }

      return ergastAPI;
  });

Любая помощь была бы оценена.

Теги:

2 ответа

1
Лучший ответ

Проблема в том, что из-за небрежности я дважды вводил один контроллер из-за общего имени.

.
config(['$routeProvider', function ($routeProvider) {
    $routeProvider.
       when("/drivers", { templateUrl: "partials/drivers.cshtml", controller: "driversController" }).
       when("/drivers/:id", { templateUrl: "partials/driver.cshtml", controller: "driverController" }).
    otherwise({ redirectTo: "/drivers" });
}]);
0

Я думаю, ваша проблема в том, как вы пытаетесь получить данные в функциях успеха.

Эта

ergastAPIservice.getDriverRaces($scope.id).success(function (response) {
    $scope.races = response.MRData.RaceTable.Races;
});

должен быть этим (данные, возвращаемые из вызова $ http, находятся в response.data)

ergastAPIservice.getDriverRaces($scope.id).success(function (response) {
    $scope.races = response.data.MRData.RaceTable.Races;
}); 

Объект ответа имеет следующие свойства (см. Здесь документацию вверху)

  • данные - ваш ответ должен быть здесь
  • положение дел
  • заголовки
  • конфиг
  • его статус

Вы пытаетесь получить доступ к response.MRData свойства. response.MRData который никогда не будет существовать, но response.data.MRData должен

Ещё вопросы

Сообщество Overcoder
Наверх
Меню