Angularjs 使用Angular factory连接到API端点

Angularjs 使用Angular factory连接到API端点,angularjs,angularjs-scope,angularjs-ng-repeat,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', fu

我试图通过最简单的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; 
        }); 
}]);

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

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

如果您拥有该域,请确保请求数据的域在
访问控制允许来源
标题中以及http谓词(
GET
POST
PUT
…或
*
对于每个http方法)中都是允许的

如果您使用的是API,您应该在文档中找到与此相关的内容

编辑

我对RoR有点生疏,但从我的谷歌搜索结果来看,你可以使用宝石,或者试试

基本上,可以将以下两个头添加到服务器的响应中:

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

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

before_filter :add_allow_origin_headers

def add_allow_origin_headers                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
  response.headers['Access-Control-Allow-Origin'] = request.headers['Origin'] || '*'                                                                                                                                                                                                                         
end 
或者您可以使用名为
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
这将允许来自不同应用程序的请求,为您解决问题

关于gem的更多信息

看起来像CORS问题..访问不同的域代码似乎是可靠的,在控制台中得到了这一点XMLHttpRequest无法加载。请求的资源上不存在“Access Control Allow Origin”标头。因此不允许访问源“”。确定如何修复它并允许访问?您的API写入了什么?(Rails?)但是应该允许从同一个域访问吗?是吗?否,您必须特别允许服务器端的域。您可以使用
*
允许所有域进行测试。您能告诉我们您的服务器使用的是什么语言吗?这是一个浏览器功能,如果你使用
curl
发布数据,你就不会有这个问题。这是真的,从
curl
我可以毫无问题地访问,这个应用程序是用RoR编写的,怎么允许呢?我的Rail已经生锈了,但是谷歌搜索CORS Rails,你应该找到你想要的。参见编辑