【问题标题】:Making a post request from a sinatra app to a rails app从 sinatra 应用程序向 rails 应用程序发出 post 请求
【发布时间】:2012-10-10 14:46:15
【问题描述】:

我需要从 sinatra 应用程序向 Rails 应用程序发送一个 POST 请求,该应用程序将返回一些 json。我在本地测试此功能。网址如下:

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

在本地主机上,网址是:

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 来测试请求并且它可以工作,但是在上面的代码中根本没有发出请求。我的代码有什么错误?

谢谢

【问题讨论】:

    标签: javascript ruby-on-rails jquery sinatra


    【解决方案1】:

    您也可以设置此设置:

    jQuery.support.cors = true;
    

    这使您可以使用 jQuery 进行跨域调用。这可能不是最好的解决方案,因为您正在使用以下请求标头添加漏洞:Access-Control-Allow-Origin。

    【讨论】:

    • +1 作为提示,我不知道 jQuery 中有这个选项。就像你说的,可能不是最好的解决方案,但在某些情况下,我可以看到价值......
    • @BradWerth 谢谢!您的解决方案显然是一个更好的解决方案。 :-)
    【解决方案2】:

    这将作为 XSS 攻击被阻止。即使它们在同一个域上,子域也是不同的,这就足够了。如需更多信息,请参阅Are AJAX calls to a sub-domain considered Cross Site Scripting?

    要纠正这个问题,您可以简单地让 AJAX 访问您的本地控制器,并使用 ruby​​ 发出请求,这不会受到上述限制的限制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-19
      • 2013-10-09
      • 2018-06-26
      • 2017-01-20
      • 1970-01-01
      • 2018-02-07
      • 2016-04-02
      • 1970-01-01
      相关资源
      最近更新 更多