angular.js chrome Access-Control-Allow-Origin

时间:2012-10-01 21:24:50

标签: angularjs

我正在尝试使用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}
    });
});

有人有同样的问题吗? 你是怎么做到的?

感谢。

4 个答案:

答案 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'];
    }]);

我想出的唯一方法就是:

  1. 在services.js文件中:

    angular.module('mirthServices', ['ngResource']).
        factory('Cs', function ($resource) {
            return $resource('http://localhost/rest/cs/id/:csId');
        });
    
  2. 在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>

我添加了行标题集,希望这有帮助的人