Angularjs 未发送(或识别)API密钥头。安格拉斯

Angularjs 未发送(或识别)API密钥头。安格拉斯,angularjs,Angularjs,我试图使用AngularJS访问API,但出现以下错误: XMLHttpRequest cannot load http://www.football-data.org/alpha/soccerseasons/398/leagueTable?callback=JSON_CALLBACK. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://purepremier.

我试图使用AngularJS访问API,但出现以下错误:

XMLHttpRequest cannot load http://www.football-data.org/alpha/soccerseasons/398/leagueTable?callback=JSON_CALLBACK. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://purepremier.com' is therefore not allowed access.
这是我的服务代码:

angular.module('PremierLeagueApp.services', []).
  factory('footballdataAPIservice', function($http) {

    var footballdataAPI = {};

    footballdataAPI.getTeams = function() {
        $http.defaults.headers.common['Auth-Token'] = 'token';
      return $http.get('http://www.football-data.org/alpha/soccerseasons/398/leagueTable?callback=JSON_CALLBACK');
    };
    return footballdataAPI;
  });

我使用身份验证令牌(api密钥)访问api,但根据api所有者的说法,此api密钥头未被发送或识别。你知道我如何修改代码使之工作吗?谢谢

在发布到这样的公共站点之前,应该隐藏该API密钥。我会建议你重新生成你的钥匙(如果可能的话),以防万一-比抱歉更安全

假设您的站点url是错误消息中的“”,则API应使用您的站点url添加“访问控制允许来源”标题,以允许您访问。查看更多信息


这与您的问题没有直接关系,但我注意到您在每次调用getTeams()时都设置了$http默认值。您应该在实际函数调用之外设置它(最好是在块中),或者只发送特定应用了该头的GET请求。由于API密钥特定于(我假设)该调用,因此您可能不希望每次发出HTTP请求时都将其发送给任何人。

在发布到此类公共站点之前,您应该隐藏该API密钥。我会建议你重新生成你的钥匙(如果可能的话),以防万一-比抱歉更安全

假设您的站点url是错误消息中的“”,则API应使用您的站点url添加“访问控制允许来源”标题,以允许您访问。查看更多信息


这与您的问题没有直接关系,但我注意到您在每次调用getTeams()时都设置了$http默认值。您应该在实际函数调用之外设置它(最好是在块中),或者只发送特定应用了该头的GET请求。由于API密钥特定于(我假设)该调用,因此您可能不希望每次发出HTTP请求时都将其发送给任何人。

更改工厂代码如下:

factory('footballdataAPIservice', function($http) {

    return {
       getTeams: function(){
          return $http({
              url:'http://www.football-data.org/alpha/soccerseasons/398/leagueTable',
              headers: { 'X-Auth-Token': 'your_token' },
              method: 'GET'
          }).success(function(data){
              return data;
            });
       }       

    }
 });
将工厂注入控制器并检索数据:

.controller('someController',function(footballdataAPIservice,$scope){

      footballdataAPIservice.getTeams().then(function(data){
             $scope.teams=data;
              console.log($scope.teams)
       });
});

以下是工作流程

按如下方式更改工厂代码:

factory('footballdataAPIservice', function($http) {

    return {
       getTeams: function(){
          return $http({
              url:'http://www.football-data.org/alpha/soccerseasons/398/leagueTable',
              headers: { 'X-Auth-Token': 'your_token' },
              method: 'GET'
          }).success(function(data){
              return data;
            });
       }       

    }
 });
将工厂注入控制器并检索数据:

.controller('someController',function(footballdataAPIservice,$scope){

      footballdataAPIservice.getTeams().then(function(data){
             $scope.teams=data;
              console.log($scope.teams)
       });
});

这是工作

您将身份验证令牌更改为授权

$http.defaults.headers.common['Authorization'] = 'token';

由于令牌是使用授权通过头发送的

您将授权令牌更改为授权

$http.defaults.headers.common['Authorization'] = 'token';
因为令牌是使用授权通过头发送的

请尝试jsonp

$http.defaults.headers.common['Authorization'] = 'token';
angular.module('PremierLeagueApp.services', []).
  factory('footballdataAPIservice', function($http) {

    var footballdataAPI = {};

    footballdataAPI.getTeams = function() {
        $http.defaults.headers.common['Auth-Token'] = 'token';
      return $http.jsonp('http://www.football-data.org/alpha/soccerseasons/398/leagueTable?callback=JSON_CALLBACK');
    };
    return footballdataAPI;
  });
试试jsonp

angular.module('PremierLeagueApp.services', []).
  factory('footballdataAPIservice', function($http) {

    var footballdataAPI = {};

    footballdataAPI.getTeams = function() {
        $http.defaults.headers.common['Auth-Token'] = 'token';
      return $http.jsonp('http://www.football-data.org/alpha/soccerseasons/398/leagueTable?callback=JSON_CALLBACK');
    };
    return footballdataAPI;
  });

谢谢你的plunker以前工作过,但现在没有:有什么想法吗?啊,api现在好像坏了。谢谢你的plunker以前工作过,但现在没有:有什么想法吗?啊,api现在好像坏了。