Javascript 使用AngularJS和ngResource调用外部api

Javascript 使用AngularJS和ngResource调用外部api,javascript,angularjs,Javascript,Angularjs,我们目前正在开发一个小AngularJS项目,从前端开始,即纯HTML和JavaScript 但是,我们需要使用ngResource进行一些API调用。目前,我们正在使用它来模拟json返回值 假设返回一个JSON: GET http://ip-address/something/1.json 我希望能够从ngResource调用此功能: app.controller('SomethingCtrl', function ($scope, $resource) { Something = $

我们目前正在开发一个小AngularJS项目,从前端开始,即纯HTML和JavaScript

但是,我们需要使用ngResource进行一些API调用。目前,我们正在使用它来模拟json返回值

假设返回一个JSON:

GET http://ip-address/something/1.json
我希望能够从ngResource调用此功能:

app.controller('SomethingCtrl', function ($scope, $resource) {
  Something = $resource("http://ip-address/something/:id", {id: "@id"});
  $scope.something = Something.get({id:1});
});
由于某种原因,这不起作用,尽管端点工作正常。Angular只是向该URL发出一个选项请求

这是某种XSS保护魔法吗?我该如何解决它

更新:将IP地址添加到示例中

编辑:

我已经更改了模拟API服务器,因此允许CORS

我现在返回这个标题,选项请求通过

Access-Control-Allow-Headers:X-Requested-With
Access-Control-Allow-Max-Age:86400
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, HEAD, OPTIONS
Access-Control-Allow-Origin:*

但是现在,get请求被取消(没有返回响应)。所以我想Angular有点神奇。

好吧,我想出来了。您需要注入$http服务并设置
useXDomain
标志

app.controller('SomethingCtrl', function ($scope, $http, $resource) {
  $http.defaults.useXDomain = true;
  Something = $resource("http://ip-address/something/:id", {id: "@id"});
  $scope.something = Something.get({id:1});
});

而且。对服务的每个请求都必须返回正确的CORS头(不仅仅是选项请求)

如果外部API支持JSONP,您可以查看JSONP,$resource的第一个参数应该是完整的URL
http://ip-address/something/:id.json
您的Angular应用程序和“固定”资源是否在同一个域:端口上运行?如果不是,那就是复制粘贴错误。我实际上在URL中使用了IP地址。在URL中没有
useXDomain
。它从来没有进入角度代码。