我正在尝试使用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}
});
});
有人有同样的问题吗? 你是怎么做到的?
感谢。
答案 0 :(得分:2)
CORS解决方案在html5rocks教程中进行了描述。为我工作。
答案 1 :(得分:2)
我自己仍在学习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);
}])
答案 2 :(得分:2)
我在端口80上运行Apache服务器,在端口8889上运行REST Web服务,同一服务器。我试过这个解决方案,但没有用:
myApp.config(['$httpProvider', function($httpProvider) { $httpProvider.defaults.useXDomain = true; delete $httpProvider.defaults.headers.common['X-Requested-With']; }]);
我想出的唯一方法就是:
在services.js文件中:
angular.module('mirthServices', ['ngResource']). factory('Cs', function ($resource) { return $resource('http://localhost/rest/cs/id/:csId'); });
在apache proxy.conf文件中:
ProxyPass /rest http://localhost
:8889/REST ProxyPassReverse /rest http://localhost
:8889/REST
答案 3 :(得分:0)
我通过更改文件httpd.conf中的apache解决了这个问题:
....
<Directory>
.....
Header set Access-Control-Allow-Origin "*"
</Directory>
我添加了行标题集,希望这有帮助的人