Я новичок в json и не могу правильно получить данные из запроса. У меня нет проблем с getDrivers()
, но когда я пытаюсь получить данные из getDriverRaces($scope.id)
я ничего не получаю. Я попытался сделать это вручную: http://ergast.com/api/f1/2015/drivers/hamilton/results.json?callback=JSON_CALLBACK
и результат был -
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;
});
Любая помощь была бы оценена.
Проблема в том, что из-за небрежности я дважды вводил один контроллер из-за общего имени.
.
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" });
}]);
Я думаю, ваша проблема в том, как вы пытаетесь получить данные в функциях успеха.
Эта
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
должен