2012-10-01 6 views
8

Jersey/Springで作成したRESTサービスからJSONを取得するためにAngular.jsサービスを使用しようとしています。angular.js chrome Access-Control-Allow-Origin

私は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} 
    }); 
}); 

誰かが同じ問題を抱えていました? どうしたのですか?

ありがとうございました。

+6

スタートは、コマンドラインからChromeと 'を追加願っています - disable-web-security'フラグを設定します。 '/ path/to/chrome/chrome --disable-web-security'です。それはテストのために素晴らしいです –

+0

それはテストのために働いた!しかし、生産についてはいかがですか?私は新しいプロジェクトを開始しており、Angular.jsのこの「問題」について少し傷ついていると感じています –

+0

angular.jsでは問題ありませんが、通常のブラウザとXMLHttpRequestの問題です。あなたがローカルホストにいないので、プロダクション環境で動作するはずです。しかし、私はCORSについてあまり知らないので、他の人を待たなければなりません。 –

答えて

2

CORSソリューションについては、html5rocksチュートリアルに記載されています。私のために働いた。

+1

AngularJSと組み合わせて使用​​します。 http://nils-blum-oeste.net/cors-api-with-oauth2-authentication-using-rails-and-angularjs/ –

2

私は今でもAngularを学んでいますが、現在のURLホストとポートを取得するために$ locationサービスを使用すると、環境間でコードを移動するときの作業が楽になります。ちなみに、これはあなたが描いている問題を克服するのにも役立ちました。

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

ポート80で動作するApacheサーバーと、ポート8889、同じサーバー上のREST Webサービスがあります。私は、このソリューションを試みたが、うまくいきませんでした:私は仕事にこれを取得するために考え出し

 
    myApp.config(['$httpProvider', function($httpProvider) { 
     $httpProvider.defaults.useXDomain = true; 
     delete $httpProvider.defaults.headers.common['X-Requested-With']; 
    }]);

唯一の方法だった:

 
angular.module('mirthServices', ['ngResource']). 
    factory('Cs', function ($resource) { 
     return $resource('http://localhost/rest/cs/id/:csId'); 
    }); 
  • :services.jsファイルで

    1. apache proxy.confファイル:

       
      ProxyPass /rest http://localhost:8889/REST 
      ProxyPassReverse /rest http://localhost:8889/REST 
      
  • +0

    私は自分の問題を解決してサーバーレスポンスを修正しましたが、Webサービスも制御する必要があります。コース。 Access-Control-Allow-Origin:*ヘッダーを追加しました。 –

    0

    私はファイルhttpd.confでのapacheに変更することで、この問題を解決:

    .... 
    <Directory> 
        ..... 
        Header set Access-Control-Allow-Origin "*" 
    </Directory> 
    

    私は行ヘッダーのセットを追加し、このヘルプ誰か