我正在尝试使用Angular.js服务从使用Jersey/Spring创建的REST服务中获取JSON。
当我使用Firefox时,它工作正常,但是当我转到Chrome时,我收到消息:
XMLHttpRequest cannot load http://localhost:8080/VirtualLawyerPj/services/timeoftheday/asjson/tue. Origin http://localhost:8090 is not allowed by Access-Control-Allow-Origin.
这是我的服务代码:
angular.module('myAppServices', ['ngResource']).
factory('Time', function($resource){
return $resource('http://localhost:port/VirtualLawyerPj/services/timeoftheday/asjson/tue',{port:":8080"}, {
query: {method:'GET', params:{}, isArray:false}
});
});
有人有同样的问题吗?你是如何做到这一点的?
谢谢。
CORS 解决方案在 html5rocks 教程中有描述。为我工作。
我在端口 80 上运行了一个 Apache 服务器,在端口 8889 上运行了一个 REST 网络服务,同一台服务器。我尝试了这个解决方案,但没有奏效:
myApp.config(['$httpProvider', function($httpProvider) { $httpProvider.defaults.useXDomain = true; 删除$httpProvider.defaults.headers.common['X-Request-With']; }]);
我想出让它工作的唯一方法是:
-
在服务上.js文件:
angular.module('mirthServices', ['ngResource']). factory('Cs', function ($resource) { 返回 $resource('http://localhost/rest/cs/id/:csId'); });
-
在 apache proxy.conf 文件上:
代理传递/休息 http://
localhost
:8889/休息ProxyPassReverse/rest http://localhost
:8889/REST
我自己仍在学习 Angular,但使用 $location 服务获取当前的 url 主机和端口可以在环境之间移动代码时更容易。顺便说一句,这也帮助我克服了您描述的问题。
angular.module('myAppServices', ['ngResource']).
factory('Time', ['$location', function($location) {
var url = 'http://:host::port/VirtualLawyerPj/services/timeoftheday/asjson/tue';
var params = {
host: $location.host(),
port: $location.port()
};
var actions = {
query: {method:'GET', isArray:false}
};
return $resource(url, params, actions);
}])
我通过在文件 httpd.conf 中的 apache 中更改来解决此问题:
....
<Directory>
.....
Header set Access-Control-Allow-Origin "*"
</Directory>
我添加了行标题集,希望这对某人有所帮助