【问题标题】:calling external api with AngularJS and ngResource使用 AngularJS 和 ngResource 调用外部 api
【发布时间】:2013-06-17 21:30:35
【问题描述】:

我们目前正在开发一个小的 AngularJS 项目,并从前端开始,所以纯 HTML 和 JavaScript。

但是,我们需要使用 ngResource 进行一些 API 调用。目前我们使用canned来模拟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。

我现在返回此标头,并且 OPTIONS 请求通过

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 有某种魔力。

【问题讨论】:

  • 如果外部API支持JSONP可以看JSONP
  • $resource 的第一个参数应该是完整的 URL http://ip-address/something/:id.json
  • 您的 Angular 应用程序和“罐装”资源是否在同一个域:端口上运行?如果没有,那么Jquery: Why am I getting an OPTIONS request insted of a GET request?
  • 嗯,是复制和粘贴错误。我实际上在 url 中使用了 IP 地址

标签: javascript angularjs


【解决方案1】:

好的,我想通了。您需要注入 $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 标头(不仅是 OPTIONS 请求)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2013-05-10
  • 2016-04-04
  • 1970-01-01
相关资源
最近更新 更多