AngularJS 访问 Cbssports REST API

Posted

技术标签:

【中文标题】AngularJS 访问 Cbssports REST API【英文标题】:AngularJS access to Cbssports REST API 【发布时间】:2014-11-28 23:39:20 【问题描述】:

我正在尝试创建一个 angularjs 应用程序作为 cbssports 插件。

它们提供 RESTful API。

以下是我的 $http 请求:

$http.get(basePath + 'league/owners?access_token=' + cbssportsTokens['access_token'] + '&response_format=JSON')
        .success(function(data) 
           return data;
        );

它被包装在工厂中并在控制器中使用。据我所知,这是正确执行的。当我查看 chrome 开发人员工具时,我可以在控制台的请求中看到以下错误:

OPTIONS http://api.cbssports.com/fantasy/league/owners?access_token=U2FsdGVkX18Hyd0…J9DrpO7C-OXQQNXGMh0ej0iXVfPf5DkQwkLwSpCqGhipd6HogV_gZ&response_format=JSON angular.js:8560
(anonymous function) angular.js:8560
sendReq angular.js:8354
$http.serverRequest angular.js:8087
wrappedCallback angular.js:11572
wrappedCallback angular.js:11572
(anonymous function) angular.js:11658
Scope.$eval angular.js:12701
Scope.$digest angular.js:12513
Scope.$apply angular.js:12805
done angular.js:8378
completeRequest angular.js:8592
xhr.onreadystatechange
XMLHttpRequest cannot load http://api.cbssports.com/fantasy/league/owners?access_token=U2FsdGVkX18xBod…oQWvjDVSbpZCOVsoIKeVXKRSYdo6dBbIE0rgMWTkWhmgPUTyr_xnS&response_format=JSON. The 'Access-Control-Allow-Origin' header has a value 'https://www.cbssports.com' that is not equal to the supplied origin. Origin 'http://xx.xx.xx.xx:9001' is therefore not allowed access. ?access_token=U2FsdGVkX18xBodWEOfeqys5X4aDpghYrE22FGljlJd_TtKRHlWh4LHWFwVxay95BbAWvn4te1foQWvjDVSbp…:1

当我单击它表示无法加载的链接时,它会将我带到一个具有预期输出的新页面!很明显,CORS 不应该是服务器的问题。

我已经阅读了许多关于 CORS 更改标题的不同问题。以下是我的设置方式:

  $httpProvider.defaults.headers.common['Access-Control-Allow-Origin'] = '*';
  $httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = 'Origin';

任何建议都将不胜感激,这也是我在 SO 上的第一篇文章,所以如果更多信息有帮助,请告诉我。

【问题讨论】:

我使用的是$httpProvider.defaults.useXDomain = true;delete $httpProvider.defaults.headers.common['X-Requested-With']; 来使用CORS。虽然,我正在使用 $resource。 我也试过了,结果是一样的。 【参考方案1】:

所以我并没有完全让它工作。但我找到了一种解决方法。

 function _get(url) 
     return $resource(basePath + url, 
           access_token: cbssportsTokens['access_token'],
           response_format: 'JSON',
           callback: 'JSON_CALLBACK'
     , 
        get: 
           method: 'JSONP'
        
     );
  

我继续使用 JSONP 请求而不是 GET,cbs 服务器似乎对此更满意。

【讨论】:

以上是关于AngularJS 访问 Cbssports REST API的主要内容,如果未能解决你的问题,请参考以下文章

在 angularjs 拦截器中停止请求

基于AngularJS的个推前端云组件探秘

如何在 AngularJS 中访问 c​​ookie?

列表中的项目数过滤 AngularJS

Django/AngularJS:如何从我的 AngularJS 脚本访问我的 Python 上下文项

防止访问 AngularJS 中的管理页面