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 调用后显示数据,如何在控制器中渲染?的主要内容,如果未能解决你的问题,请参考以下文章