2013-07-15 9 views
9

私はRails APIと別のhtml5アプリケーションを開発しています。彼らは同じドメインを共有していません。クロスドメイン要求を受け入れるようにRailsアプリケーションを設定するにはどうすればよいですか?私は、しかし、運のない、私のApplicationControllerにの先頭に次を追加した -Railsサーバでクロスドメインコールを設定する

before_filter :set_access_control_headers 

    def set_access_control_headers 
    headers['Access-Control-Allow-Origin'] = 'http://myfrontend.com:3002' 
    headers['Access-Control-Request-Method'] = 'GET, OPTIONS, HEAD' 
    headers['Access-Control-Allow-Headers'] = 'x-requested-with,Content-Type, Authorization' 
    end 

次のように私の他のアプリ上のマイジャバスクリプトが見えます -

var req = $.ajax({ 
    url: url, 
    type: "GET", 
    crossDomain: true, 

    success: function(data, textStatus, jqXHR) 
    { 
    alert('success'); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) 
    { 
    alert('error'); 
    } 
}); 

私はこの要求を実行すると、私が手私のサーバーのログに続いて -

Started OPTIONS "/api/search?location_uuid=22222222222222222" for 127.0.0.1 at 2013-07-15 16:49:56 -0400 
Processing by Api::V1::SearchController#index as JSON 
    Parameters: {"location_uuid"=>"22222222222222222"} 
WARNING: Can't verify CSRF token authenticity 
    User Load (20.5ms) SELECT "users".* FROM "users" ORDER BY name DESC LIMIT 30 OFFSET 0 
(63.1ms) SELECT COUNT(*) FROM "users" 
Completed 204 No Content in 300ms (ActiveRecord: 0.0ms) 

これを正しく動作させるためのヒントはありますか?

+0

が、 OPTIONSについては?あなたはどのようにこのように見えるのですか? –

+1

'before_filter'ではなく' after_filter'を試してください。 – mccannf

+0

これは興味深い観察です。私の要求ではGETを指定しますが、ログはOPTIONSヘッダーが設定されていることを示します。ルートは次のようになります - 名前空間:API、デフォルト:{フォーマット: 'JSONは'} スコープモジュールを実行します: マッチ "/検索" を行うV1、:=> "検索#インデックス" 最後 終わりに – Blake

答えて

4

JSONPとしてデータ型を追加すると、クロスブラウザの問題を回避しているようです:

var req = $.ajax({ 
    url: url, 
    type: "GET", 
    crossDomain: true, 
    dataType: "JSONP", 
    ... 

は、より多くの情報のため、この質問を参照してください - あなたがアクションを実装しているか - 愚かな

Can anyone explain what JSONP is, in layman terms?

関連する問題