【问题标题】:Show data after AJAX call, how to render in controller?AJAX 调用后显示数据,如何在控制器中渲染?
【发布时间】:2012-09-09 01:57:18
【问题描述】:

我想使用link_to 来调用一个名为show 的控制器动作。发生这种情况,我收到 200 条消息。现在我想用返回的内容更新div

控制器中的代码:

respond_to do |format|
  format.html # show.html.erb
  format.js 
 end

视图、链接和 JavaScript 中的代码:

<%= link_to "Show analysis", company_comparison_path(3), :remote => true , :id => "thelink" %>

<div id="replaced"> will be replaced </div>

<script>  
$('#thelink').bind('ajax:complete', function() {  
        $('#replaced').html(data)
});  
 </script>  

我想我仍然不明白如何将 HTML 或 JavaScript 从控制器正确返回到 JavaScript。如果我用括号中的一些文本替换 JavaScript 中的“数据”一词,我会得到正确的输出。但是如何从控制器操作中获取结果?

【问题讨论】:

    标签: html ruby-on-rails ajax render


    【解决方案1】:

    您快到了,但您需要告诉绑定函数您要插入#results div 中的实际html 内容。当您在 $('#replaced') 上调用 .html() 时,您使用的变量 (data) 仍未定义。

    尝试以下方法:

    $('#thelink').bind('ajax:complete', function(event, data) {
      $('#replaced').html(data.responseText);
    }); 
    

    edit:哦,要记住的是,这可能会呈现您的视图,包括可能不是您想要的布局。您可以在控制器中添加 render layout: false if request.xhr? 之类的内容,以防止布局显示在 ajax 请求中。

    【讨论】:

    • 这太好了,解决了一个我已经解决了 3 个小时的问题。只是想知道“函数(事件,数据)”部分,我想我在其他地方看到了这个。我需要将事件称为某种东西,但我不知道那是做什么的。这个顺序是固定的吗?如果我忘记它会失败吗?很高兴现在可以使用了。
    【解决方案2】:

    如果你想从 AJAX 响应中返回更丰富的内容,你可以通过 :render_to_string 方法从控制器渲染视图。

    查看更多:http://apidock.com/rails/ActionController/Base/render_to_string

    respond_to do |format|
      format.html # show.html.erb
      format.js {
        @content = render_to_string(:partial => 'some_partial_view')
      }
     end
    

    【讨论】:

    • 感谢您的回答,这很有用。但我的问题是对 javascript 方面缺乏理解,Peter 解决了这个问题。还是很高兴知道。
    猜你喜欢
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多