【问题标题】:Ruby on Rails - AJAX request not working (cross-origin), tried everythingRuby on Rails - AJAX 请求不起作用(跨域),尝试了一切
【发布时间】:2015-09-23 16:30:57
【问题描述】:

(抱歉英语不好) 我尝试执行 ajax 请求,但由于同源策略而无法正常工作。我的应用程序尚未部署,我使用 Ruby on Rails 3.2.3 和 Unicorn 服务器。

AJAX 请求位于资产 javascript 文件中,我在视图中调用它。当我尝试从 AJAX 请求中获取数据时,控制台说 “跨域请求被阻止:同源策略不允许读取 [url] 处的远程资源。这可以通过将资源移动到同一域或启用 CORS 来解决。”

我什么都试过了:

  • 在ajax请求中使用jsonp:console.log说语法错误
  • 使用 rack cors,使自述文件 (https://github.com/cyu/rack-cors) 中所说的一切,但它不起作用,控制台中的消息仍然相同(是否重新启动服务器)
  • 尝试一些关于 rack-cors 的语法,在我能找到的堆栈溢出的每篇文章中都提到,我试过这个:

应用程序.rb:

config.middleware.insert_before ActionDispatch::Static, Rack::Cors do
  allow do
    origins '*'
    resource '*', :headers => :any, :methods => [:get, :post, :options], expose: :location
  end

但它不起作用,我在 config.ru 中尝试了这个

use Rack::Cors do

  # allow all origins in development
  allow do
    origins 'localhost:3000'
    resource '*',
         :headers => :any,
         :methods => [:get, :post, :delete, :put, :options]
  end
end

我用 "origins 'localhost:3000'" 和 "origins '*'" 尝试了这段代码,但它们都不起作用,我没有忘记 "require 'rack/cors'"

我很绝望,你能帮帮我吗?

【问题讨论】:

  • 你用的是什么浏览器? Chrome 会在内部阻止此类行为。在你的 bash $open -a Google\ Chrome --args --disable-web-security 中运行将关闭此功能。
  • 我用的是firefox,但应用程序也需要在chrome中运行。
  • 我要问:你修改你的application.rb文件后是否重启了你的rails服务器?
  • 是的,每次更改后我都会重新启动
  • 如果您仍然需要这方面的帮助,请尝试确保方法数组中包含所有 HTTP 动词。如果这仍然不起作用,请发布您的控制器代码。你可能需要skip_before_filter :verify_authenticity_token。如果这不起作用,请检查您的路线和命名空间。

标签: ruby-on-rails ajax cors same-origin-policy


【解决方案1】:

我们遇到过类似的情况,使用 rack-cors 解决了

基因文件:

gem 'rack-cors', :require => 'rack/cors'

应用程序.rb:

config.middleware.insert_before 0, "Rack::Cors" do
  allow do
    origins '*'
    resource '*', :headers => :any, :methods => [:get, :post, :options]
  end
end

别忘了重启你的 Rails 服务器!

编辑:

我突然想到,如果您将应用服务器也用作 Web 服务器,这只会在生产中工作。如果您使用 Nginx 或 Apache 作为您的 Web 服务器,那么您的静态资产将由它提供。您必须在 Nginx/Apache 上启用 CORS。

【讨论】:

  • 所以这就是为什么它对我不起作用!我已经使用 rack-cors (完全相同的代码),但我怎样才能让它在开发模式下工作?
  • 我只是测试它,即使在生产模式下它仍然无法正常工作 =/
【解决方案2】:

【讨论】:

  • 我设置了与教程中描述的相同的标题,没有任何改变
猜你喜欢
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
相关资源
最近更新 更多