繁体   English   中英

将HTML返回给AJAX Rails调用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM