1

我正在使用 Boxy.js 将我的 /signup 页面调用到模式窗口中。我猜是阿贾克斯。我希望页面在以这种方式调用时不使用布局呈现。

我试过了:

layout proc {|controller| controller.request.xhr? ? false: "application" }

和:

def render(*args)
    args.first[:layout] = false if request.xhr? and args.first[:layout].nil?
    super
  end

在应用程序控制器中,我用谷歌搜索了一些片段,但它们不起作用。/signup 仍在提出布局。

以下是 Boxy 调用 /signup 时的部分标头:

请求网址:http://localhost:3000/signup?_=1301708866195

请求方法:GET

X-Requested-With:XMLHttpRequest

4

1 回答 1

1

最佳实践是使用 Rails 的 js 响应,如下所示:

respond_to do |format|
  format.html
  format.js { render :action_name, :layout => false }
end

但是因为默认情况下 jQuery 不会发送正确的 XHR 标头,所以您需要在 application.js 中添加类似这样的内容:

$.ajaxSetup({
  headers : {
    'Accept' : 'text/javascript',
    'X-Requested-With' : 'XMLHttpRequest'
  }
});

如果您只想使用快速而肮脏的东西,请尝试以下操作:

respond_to do |format|
  format.html { render :layout => false if request.xhr? }
end
于 2011-05-31T20:53:00.080 回答