2014-03-03 101 views
0

我有一個Rails v4.0.2應用程序設置並在Heroku上託管。我暫時禁用了CSRF真實性令牌檢查,以允許從外部來源POST JSON數據。當我在Chrome中使用高級REST客戶端擴展進行POST時,它可以正常工作並創建新記錄。然而,試圖在JavaScript中創建完全相同的POST與Ajax調用的時候,我收到以下錯誤:Rails POST與跨域XMLHttpRequest

OPTIONS http://herokudomain.com/users.json 404(未找到)

OPTIONS http://herokudomain.com/users.json否「訪問控制 - 允許 - Origin'標題出現在請求的資源上。因此不允許訪問原產地'http://requestdomain.com'。

XMLHttpRequest無法加載http://herokudomain.com/users.json。請求的資源上沒有「Access-Control-Allow-Origin」標題。因此不允許訪問原產地'http://requestdomain.com'。

我特別不理解404錯誤,因爲我確實使用了正確的URL,雖然我在此爲了演示而更改了它。如果我將錯誤消息中的URL複製到瀏覽器中,我將轉到所需的頁面,而不是404.

是否有人可以幫助啓發我使用高級REST客戶端的差異,以及在JavaScript中使用XMLHttpRequest,以及如何解決此問題?

EDITS:

這裏是我的測試頁,我已經嘗試過通過本地主機和託管域中運行的代碼:http://pastebin.com/z3hJEX8c

回答

1

在應用程序控制器添加這些行會允許跨域請求,但爲了安全,您可以定義域名

before_filter :allow_ajax_request_from_other_domains 

def allow_ajax_request_from_other_domains 
    headers['Access-Control-Allow-Origin'] = '*' 
    headers['Access-Control-Request-Method'] = '*' 
    headers['Access-Control-Allow-Headers'] = '*' 
end 
+0

我已經有了類似的東西,除了最後一行'Access-Control-Allow-Headers'。我已經添加了它,仍然繼續得到相同的錯誤。我應該指定我正在使用Rails v4.0.2,因爲我在Stack Overflow上看到的其他問題似乎表明不同版本的Rails有不同的解決方案。 – badgercore

+0

這是在rails 3.2上工作,但我沒有在rails4上試過它我在1周內遇到了這個問題,我認爲CRFS標記也會出現這個問題,試着在應用程序控制器中取消註釋protect_from_forgery,如果它工作的話,我會提供給你使代碼正常工作 –

+0

我已經將應用程序控制器中的protect_from_forgery行註釋掉了,這使得它可以在Chrome中使用高級REST客戶端擴展。由於某些原因,使用JavaScript時它的行爲不同,我仍然收到這些錯誤。 – badgercore