无法使用ngResource检索JSON

时间:2017-10-04 21:46:39

标签: angularjs json rest ngresource

我试图从网址中检索一些JSON,但我无处可去。这是我试图建立的小型足球应用程序(可能是供个人使用),主要是为了更好地使用Angular 1(在使用Angular 2之前)。

http://api.football-data.org/code_samples

正如您所看到的,我没有使用Angular JS示例,我正在密切尝试复制javascript示例。

http://api.football-data.org/v1/competitions/424

这是我试图通过ngResource方式显示的数据。我遵循了Udemy Tutorial,如果可能的话,我希望有人以这种方式做一个例子。附: API KEY是免费的(http://api.football-data.org/client/register)!只是电子邮件,你将立即回来!

如果有人可以帮我这个。我非常感激。

由于

HTML

<!DOCTYPE html>
    <html lang="en-gb" ng-app="quickEleven">
        <head>
            <title>AngularJS Football Stats</title>
            <meta http-equiv="X-UA-Compatible" content="IE=Edge">
            <meta charset="UTF-8">

            <!-- load bootstrap and fontawesome via CDN -->
            <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" />
            <style>
                html, body, input, select, textarea
                {
                    font-size: 1.05em !important;
                }
            </style>

            <!-- load angular via CDN -->
            <script src="//code.angularjs.org/1.3.0-rc.2/angular.min.js"></script>
            <script src="//code.angularjs.org/1.3.0-rc.2/angular-route.min.js"></script>
            <script src="//code.angularjs.org/1.3.0-rc.2/angular-resource.min.js"></script>
            <script src="app.js"></script>
        </head>
        <body>

            <header>
                <nav class="navbar navbar-default">
                <div class="container">
                    <div class="navbar-header">
                        <a class="navbar-brand" href="/">AngularJS Football</a>
                    </div>

                    <ul class="nav navbar-nav navbar-right">
                        <li><a href="#"><i class="fa fa-home"></i> Home</a></li>
                    </ul>
                </div>
                </nav>
            </header>

            <div class="container">

                <div ng-controller="homeController"></div>

            </div>

        </body>
    </html>

JS

// MODULE
var quickEleven = angular.module('quickEleven', ['ngRoute', 'ngResource']);

// CONTROLLERS
quickEleven.controller('homeController', ['$scope', '$resource', 'cityService', function($scope, $resource, cityService) {
    $scope.footballAPI = 
        $resource("http://api.football-data.org/v1/competitions/424", {headers: {"X-Auth-Token": "<API TOKEN KEY>"}}, { get: { method: "JSONP"}
        });

    $scope.fussball = $scope.footballAPI.get({});

    console.log($scope.fussball);
}]);

1 个答案:

答案 0 :(得分:1)

花点时间阅读$resource,你做了一些错误,比如设置标题。

  

<强> USAGE:
  $ resource(url,[paramDefaults],[actions],options);

     

paramDefaults:url参数的默认值。

因此,使用您定义的资源,令牌不会转到标题但作为参数,API将返回404.您应该为每个方法设置标题:

并且您不需要使用jsonp,get将起作用

例如:

$resource("http://api.football-data.org/v1/competitions/:competitionId", {}, {    
  get: {
    method: "GET",
    headers: {
      "X-Auth-Token": "<API TOKEN KEY>"
    }
  }
});

调用方法:

  

&#34;类&#34;没有正文的动作:Resource.action([参数],   [成功],[错误])&#34; class&#34;与身体的行动:   Resource.action([parameters],postData,[success],[error])

因此,为竞争ID 424调用get是:

  $scope.footballAPI.get({
    competitionId: 424
  }, function(data) {
    $scope.fussball = data;       
  }, function(err) {
    console.log('error:', err);
  });