我需要将一个来自sinatra应用程序的POST请求发送到rails应用程序,该应用程序将返回一些json。我在本地测试这个功能。网址如下:
Rails app : railsapp.mydomain.com/api/v1.json
Sinatra app: sinatraapp.mydomain.com
在localhost上,网址为:
Rails app: localhost:3000/api/v1.json
Sinatra app:localhost 3001
在我在本地运行的sinatra应用程序中,我有以下代码在本地发出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 Client来测试请求并且它可以工作,但是在上面的代码中根本没有提出请求。我的代码中有什么错误?
谢谢
答案 0 :(得分:3)
您也可以设置此设置:
jQuery.support.cors = true;
这使您可以使用jQuery进行跨域调用。它可能不是最佳解决方案,因为您使用以下请求标头添加漏洞:Access-Control-Allow-Origin。
答案 1 :(得分:1)
这是作为XSS攻击而停止的。即使它们位于同一个域中,子域也是不同的,这就足够了。有关详细信息,请参阅Are AJAX calls to a sub-domain considered Cross Site Scripting?。
要纠正这个问题,你可以简单地让AJAX命中你的本地控制器,并使用ruby发出请求,这不受上述限制的限制。