2012-10-10 95 views
1

我需要從sinatra應用程序發送一個POST請求到一個rails應用程序,它會返回一些json。我在本地測試這個功能。網址如下:從sinatra應用程序發送一個post應用程序到rails應用程序

Rails app : railsapp.mydomain.com/api/v1.json 
Sinatra app: sinatraapp.mydomain.com 

在本地主機上,網址是:

Rails app: localhost:3000/api/v1.json 
Sinatra app:localhost 3001 

在我屈應用程序在本地運行,我有以下代碼,以使本地POST請求

$("#submit").click(function(){ 
    $.post("http://localhost:3000/api/v1.json", 
    {email:"<email_here>",password:"<password_here>"}, 
    function(data) { 
     //Do something with response 
    } 
    ); 

}); 

此外,請求標頭中的Content-Type應爲"application/x-www-form-urlencoded"。我在Firefox中使用REST客戶端來測試請求並且它可以工作,但是在上面的代碼中,請求並沒有被完成。我的代碼中有什麼錯誤?

謝謝你

回答

1

這被停止作爲XSS攻擊。即使它們在同一個域中,子域也不同,這就足夠了。有關更多信息,請參見Are AJAX calls to a sub-domain considered Cross Site Scripting?

要糾正這種情況,您可以簡單地使AJAX命中您的本地控制器,並使用ruby發出請求,這不會受到上述限制的限制。

+0

是的,我用一個簡單的解決方法更新了答案。 –

3

您還可以設置此設置:

jQuery.support.cors = true; 

這使你做跨域使用jQuery調用。這可能不是最好的解決方案,因爲您通過使用以下請求標頭來添加漏洞:Access-Control-Allow-Origin。

+0

爲提示+1,我沒有意識到這個選項在jQuery中。就像你說的,可能不是最好的解決方案,但在某些情況下,我可以看到值... –

+0

@BradWerth謝謝!你的解決方案顯然是更好的解決方案:-) –

相關問題