Angularjs 未发送(或识别)API密钥头。安格拉斯
我试图使用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.
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现在好像坏了。