2013-07-15 39 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 

我對我的其他應用程序的JavaScript看起來如下 -

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

很蠢,但 - 你已經實現行動對於選項?你如何選擇這種模式? –

+1

嘗試'after_filter'而不是'before_filter'。 – mccannf

+0

這是一個有趣的觀察。在我的請求中,我指定了GET,但是日誌表示正在設置OPTIONS標頭。路徑看起來像這樣 - 名稱空間:API,默認:{格式: 'JSON'}做 範圍模塊:v1的做 匹配 「/搜索」,:爲=> 「搜索#指數」 端 端 – Blake

回答