javascript - 将 HTML 返回给 AJAX Rails 调用

标签 javascript ruby-on-rails ajax ruby-on-rails-4 coffeescript

读完 David Heinemeier Hansson 的 blog post关于服务器生成的 javascript 我决定回顾一下我在 Rails 应用程序中进行 AJAX 调用的方法。大卫的建议是创建一个 .js.erb模板,它只是嵌入了在服务器上生成的 ruby​​ 代码的 javascript,而不是在客户端 javascript 中进行任何 DOM 操作。

当然,另一种方法是在客户端简单地执行所有操作,并且(例如)从服务器返回一个表示更新对象的 JSON 对象,并使用 javascript 执行所有 DOM 操作。

我不喜欢第一种方法有两个原因:

1) 我在我的应用程序中使用 HAML 和 Coffeescript,并且觉得通过使用 vanilla javascript 和 ERB 会用不同语言的代码不必要地膨胀我的代码库(也许可以创建 .coffee.haml 模板而不是 js .erb,我不知道)

正如 David 在他的博客文章中所说,第二种方法非常依赖客户端 javascript,这可能导致客户端 javascript 代码臃肿,并且可能需要客户端模板,在最坏的情况下场景可能意味着模板数量几乎翻倍。

我决定采用的方法(并想问一下这是否是完全愚蠢的方法)如下:

1) 设置 remote: true标记使链接和表单利用 AJAX 发布到服务器。

2) 在我的 Controller 中,将所有内容都作为 html 处理,如果请求是 AJAX 请求,则无需布局即可简单呈现:render partial: '<partial-name>', layout: false if request.xhr? .这只是返回部分的 HTML,并评估了 ruby​​ 代码。

3) 在 Assets javascript 文件中(例如 <partial-name>.js.coffee )收听 ajax:success并附加响应中的 HTML。

我喜欢这种方法,因为(在我相当简单的应用程序中)它允许我将所有代码保存在 HAML/Coffeescript 中,并避免使用任何 javascript 模板。

我意识到如果应用程序的复杂性增加,这个问题可能会呈现出不同的特征,但我仍然认为这是一个有效的问题:这是为 Rails 应用程序实现基于 AJAX 的架构的糟糕方法吗(如果是,为什么?即为什么从 AJAX 调用返回 HTML 而不是 JSON 是一个坏主意?)或者这是我应该继续使用的东西吗?

谢谢 :-)

最佳答案

在我看来,您的方法非常准确。但是我会改变 1 pt。我不使用 remote: true,而是直接使用 jQuery ajax 调用。

$(function(){
   $('#some_link').click(function() {
       $.ajax({
          // some parameters here
      })
      .done(function(data){
           $('div').html(data);
      });
   });
});

关于javascript - 将 HTML 返回给 AJAX Rails 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21043068/

相关文章:

javascript - 如何减少 SPA 中 DOM 元素的数量

javascript - 动态生成 JavaScript 对象的创造性方法

ruby-on-rails - Rails 4 - 在公共(public)内部创建一个文件夹,用于存储上传的文件

ruby-on-rails - 安装 Ruby 2.2.3 后捆绑 SSL 问题

php - 使用按钮使用文本框中的值更新数据库字段,它显示空白值

java - 如何控制 JsonView 外部/打包对象属性的可见性?

javascript - Singleton 中的公共(public)函数调用自身

javascript - 带有 Tumblr 分享按钮的 Google 社交互动分析?

ruby-on-rails - Rails 应用程序管理部分

javascript - AJAX 未调用所需的 C# Controller 方法