0

我已经使用 rack-cors gem 在 Rails 4 应用程序中实现了 CORS。它在 Chrome 和 Firefox 中运行良好,但我无法阻止呈现布局。

在我的行动结束时,我有以下内容:

respond_to do |format|
  format.html { layout false if request.xhr? }
end

如果我将 format.js 或 format.json 放在 format.html 之前,那么它就不再起作用了。请求.xhr?返回假。我猜这是因为 cors 重定向了请求并且它不再看起来像 xhr 请求?

我能想到的唯一方法是将操作复制到另一个名称或另一个控制器并完全禁用布局,但这似乎太老套了。

有任何想法吗?

4

2 回答 2

0

我通过安装 rack_cors gem 并为 cors 请求创建一个名为 Ajax 的新控制器来解决此问题。由于该操作与另一个控制器中的常规 html 操作相同,因此我将代码移到了一个模块中,以便两个控制器可以共享它。控制器之间的唯一区别是我设置

layout false

在新控制器的顶部。这是我的完整控制器。

class AjaxController < ApplicationController

include CalcResults

skip_before_filter :authorize

layout false

def ajax_results

  calc_results

  respond_to do |format|

    format.html 

  end
 end
end

在我的 config/application.rb 文件中:

config.middleware.use Rack::Cors do
  allow do
    origins '*'
    resource '/ajax_results/*', :headers => :any, :methods => [:get, :options]
  end
end
于 2013-10-05T13:52:46.957 回答
0

你应该试试这个: -

format.html { :layout => false if request.xhr? }
于 2013-10-05T02:57:58.453 回答