2012-10-10 47 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谢谢!你的解决方案显然是更好的解决方案:-) –

相关问题