Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Don';从Ajax调用时不渲染布局_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails Don';从Ajax调用时不渲染布局

Ruby on rails Don';从Ajax调用时不渲染布局,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有一个名为index的rails操作,它可以呈现页面内容和布局。当我使用浏览器转到/index操作时,它会像预期的那样工作。我希望能够通过使用Ajax调用来呈现此操作,我使用以下方法来实现此操作: <%= link_to "Back", orders_path, :id => 'back_btn', :remote => true %> <%= javascript_tag do %> jQuery("#back_btn").bind("ajax:com

我有一个名为index的rails操作,它可以呈现页面内容和布局。当我使用浏览器转到/index操作时,它会像预期的那样工作。我希望能够通过使用Ajax调用来呈现此操作,我使用以下方法来实现此操作:

<%= link_to "Back", orders_path, :id => 'back_btn', :remote => true %>
<%= javascript_tag do %>
  jQuery("#back_btn").bind("ajax:complete", function(et, e){
    jQuery("#mybox").html(e.responseText);
  });
<% end %>
'back\u btn',:remote=>true%>
jQuery(“#back#btn”).bind(“ajax:complete”,函数(et,e){
jQuery(“#mybox”).html(e.responseText);
});

当以这种方式调用该操作时,我希望它渲染并传递索引操作,不包括布局。我如何才能做到这一点?

您需要一种方法让服务器知道请求类型存在差异。这可以通过几种不同的方式完成:

  • 将键值附加到URL(例如layout=off),并更改控制器逻辑以呈现无视图的数据。这是一种黑客行为
  • 让您的控制器通过XML或JSON返回数据(控制器将知道所请求的内容类型),然后将其相应地格式化并显示在浏览器中。这是一种更可取的方式,因为内容类型之间有明确的分离,更适合MVC体系结构
  • 创建一个服务于数据的API。这将导致独立的身份验证逻辑、客户端的更多代码、服务器上的额外APi控制器等。对于您的情况来说,这很可能是一种过度使用

您应该能够向控制器操作添加format.js操作,如下所示:

respond_to do |format|
  format.js
  format.html 
  format.json { render json: @foos }
理想情况下,您希望创建一个index.js.erb文件,用于构建页面内容:

$('#foos_list').update("<%= escape_javascript(render(@foos)) %>");
但是,如果您想使用ajaxified前端,我可以推荐一个这样做的框架吗?它将在很大程度上帮助你建立你的网站


此外,使用这样的框架将迫使您按照@Zepplock的第二个建议分离应用程序。

您只需检测请求是否为XML HTTP请求,然后呈现如下空白布局:

render layout: 'blank' if request.xhr?
您需要在
app/views/layouts/blank.html.erb
中创建一个空白布局,如下所示:

<%= yield %>

<%= yield %>