[英]Returning HTML to AJAX Rails calls
在阅读David Heinemeier Hansson关于服务器生成的javascript的博客文章后 ,我决定回顾一下我在Rails应用程序中进行AJAX调用的方法。 David建议创建一个.js.erb
模板,它只是嵌入了服务器上生成的ruby代码的javascript,而不是在客户端javascript中进行任何DOM操作。
另一种方法当然是简单地在客户端执行所有操作,并且(例如)从服务器返回表示更新对象的JSON对象,并使用javascript来执行所有DOM操作。
我不喜欢第一种方法有两个原因:
1)我在我的应用程序中使用HAML和Coffeescript,并且觉得通过使用vanilla javascript和ERB会不断地使用不同语言的代码膨胀我的代码库(也许可以创建.coffee.haml模板而不是js.erb,我不知道)
2)我真的不喜欢“乱丢”我的视图文件夹的想法,主要是javascript文件,嵌入了一点ruby。
正如大卫在他的博客文章中谈到的那样,第二种方法非常依赖于客户端javascript,这可能导致客户端javascript代码膨胀,并且可能需要客户端模板,在最坏的情况下可能意味着几乎是模板数量的两倍。
我决定采用的方法(并且想询问是否完全是愚蠢的方式)如下:
1)设置remote: true
标志,使链接和表单利用AJAX发布到服务器。
2)在我的控制器中,将所有内容作为html处理,如果请求是AJAX请求,则只需渲染而不进行布局: render partial: '<partial-name>', layout: false if request.xhr?
。 这只是返回partial的HTML,并评估ruby代码。
3)在资产javascript文件(例如<partial-name>.js.coffee
)中,听取ajax:success
并从响应中附加HTML。
我喜欢这种方法,因为(在我相当简单的应用程序中)这允许我将所有代码保存在HAML / Coffeescript中,并避免使用任何javascript模板。
我意识到如果应用程序的复杂性增长,这个问题可能会有不同的特征,但我仍然认为这是一个有效的问题:这是一个不好的方法来为Rails应用程序实现基于AJAX的架构(如果是这样的话) ,为什么?即有什么理由为什么从AJAX调用返回HTML而不是JSON是一个坏主意?)或者这是我应该继续使用的东西?
谢谢 :-)
你的方法在我看来非常准确。 但是我会换1点。 而不是使用remote:true,我会直接使用jQuery ajax调用。
$(function(){
$('#some_link').click(function() {
$.ajax({
// some parameters here
})
.done(function(data){
$('div').html(data);
});
});
});
如果你使用remote:true它会发送一个js请求而不是html请求。
然后,当执行controller方法时,它会查找js.erb或js.haml文件,该文件与刚刚完成执行的控制器操作同名。
在此文件中,您可以编写'js'代码来执行控制器操作完成执行后需要执行的任何操作,如更改部分视图或更新视图等。
如果你在javascript资产文件中有一个函数,你也可以调用该函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.