jQuery .get()
如何使用Rails方法?我在名为documents
的{{1}}控制器中设置了一个方法,我想在一个单独的JS文件中从JS方法访问该方法。通过做一些研究,我发现使用templates
是访问Rails方法的最佳方式,但是当我这样做时,.get()
,只是控制台记录整个var templates = $.get("/documents#templates", function (data) { console.log(data) }
HTML DOM结构
我猜我需要“劫持”路线,但是我尝试添加自定义路线,控制台日志仍然返回HTML页面,甚至没有到达我的Rails控制器。
如果有帮助(尽管我对此表示怀疑,因为完全删除它不会改变控制台日志结果),这是控制器中的/documents
方法:
templates
答案 0 :(得分:0)
您想要归还什么?根据您的需要,有几种不同的方法。
$(data).find('selector')
是最不优雅的方式。您可以使用jQuery从完整响应中提取所需内容。
respond_with(@output, :layout => !request.xhr? )
将在没有周围的application.html文件的情况下呈现页面。以下是为jQuery呈现不同部分的方法。
respond_with(@output) do |format|
format.html { render partial: 'templates' if request.xhr? }
end
如果这是你需要的,你也可以轻松地发回JSON。这里有一篇关于Rails AJAX的各种方法的好文章:http://madebydna.com/all/code/2011/12/05/ajax-in-rails-3.html
答案 1 :(得分:0)
如果您想用HTML片段回复jQuery的GET请求,可以考虑渲染partial layout(不包括完整的应用程序布局)。在您的控制器中,响应可能如下所示:
def templates
@templates = DocumentTemplate.all
if request.xhr?
render :partial => 'templates', locals: {:templates => @templates}
else
# respond with your normal layout if required
end
end
然后在app/views/documents/
文件夹中创建名为_templates.html.haml
(或.erb)的部分文件。请注意部分名称中的前导下划线。
您可以访问templates
局部变量以在您的部分文件中循环(此处的语法适用于HAML):
- templates.each do |template|
# do what's required to present each template instance here
然后你的jQuery GET请求应该只收到HTML的部分片段:
$.get("/documents/templates", function(data) {
console.log('data');
alert("Load was performed.");
});