Javascript 使用AngularJS和ngResource调用外部api
我们目前正在开发一个小AngularJS项目,从前端开始,即纯HTML和JavaScript 但是,我们需要使用ngResource进行一些API调用。目前,我们正在使用它来模拟json返回值 假设返回一个JSON: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 = $
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
。它从来没有进入角度代码。