【发布时间】: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