使用Angular工厂连接到API端点

时间:2015-06-01 15:52:38

标签: angularjs angularjs-scope angularjs-ng-repeat

我正在尝试通过最简单的AngularJS代码段连接API端点,但是有些问题阻止了我。

这是我的控制器:

app.controller('appController', ['$scope', 'skills',
 function($scope, skills) {
 skills.success(function(data) {
  $scope.skillsList = data;
});
  }
]);

我的工厂:

app.factory('skills', ['$http', function($http) { 
  return $http.get('https://www.persevy.com/skills') 
        .success(function(data) { 
          return data; 
        }) 
        .error(function(err) { 
          return err; 
        }); 
}]);

我甚至为此准备了Plunkr但也没有成功,请告诉我上述代码中的问题在哪里。

2 个答案:

答案 0 :(得分:1)

您的问题似乎与CORS有关:基本上,如果服务器端不允许,您无法通过Ajax访问域。这是大多数现代浏览器的“安全”功能。使用命令行(例如curlPostman chrome的扩展名)不会遇到此问题。

如果您拥有域https://www.persevy.com/,请确保Access-Control-Allow-Origin标头中允许请求数据的域,以及http动词(GETPOST ,每个http方法都有PUT ...或*

如果您使用的是API,则应在文档中找到有关此事项的内容。

修改

我在RoR中有点生疏,但是从谷歌上搜索,看起来你可以使用rails-cors宝石,或试试this gist

基本上,它归结为将以下两个标题添加到服务器的响应中:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *

答案 1 :(得分:1)

在你的RoR API app / controllers / application_controller.rb中:

before_filter :add_allow_origin_headers

def add_allow_origin_headers                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
  response.headers['Access-Control-Allow-Origin'] = request.headers['Origin'] || '*'                                                                                                                                                                                                                         
end 

或者您可以使用名为gem

rack-cors
#Gemfile
gem 'rack-cors'

#config/application.rb
config.middleware.use Rack::Cors do
   allow do
     origins '*'
     resource '*', :headers => :any, :methods => [:get, :post, :options]
   end
end

这将允许来自不同应用程序的请求,为您解决问题。
有关rack-cors gem here

的更多信息