AJAX 调用后显示数据,如何在控制器中渲染?

Posted

技术标签:

【中文标题】AJAX 调用后显示数据,如何在控制器中渲染?【英文标题】:Show data after AJAX call, how to render in controller? 【发布时间】: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 中的“数据”一词,我会得到正确的输出。但是如何从控制器操作中获取结果?

【问题讨论】:

【参考方案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 解决了这个问题。还是很高兴知道。

以上是关于AJAX 调用后显示数据,如何在控制器中渲染?的主要内容,如果未能解决你的问题,请参考以下文章

如何在控制器中获取视图然后渲染数据并将其传递给 ajax

如何使用 AJAX 渲染部分内容?拉拉维尔 5.2

如何调用ajax从数据库中检索数据

ajax获取数据后怎么去渲染到页面

如何通过 AJAX 调用使用 jQuery 渲染 HTML

如何在ZF2中使用Ajax在模式窗口中渲染视图?