更好的方法是使用assets/javascript/*.js或*.js.erb视图中的ajax调用

What is better - use ajax calls from assets/javascript/*.js or *.js.erb views?

本文关键字:js erb 调用 ajax 视图 javascript 方法 assets 更好      更新时间:2023-09-26

我正在使用rails从网络通信器编写一个管理服务。

所以我的问题是:用户点击一个按钮->组用户看到网络组->用户选择一些组->用户看到IP地址。我在页面上有两个表单,我需要在不重新加载页面的情况下向页面发送两次数据。

第一个服务器响应是网络组名称的列表。

第二个服务器响应是其中一个组中的IP地址列表。

问题:

在用户请求后做哪个更好:

  1. JS.ERB方式

    获取数据,将其放入views/some_file.js.erb中,在控制器中编写类似于"responsd_to{|format|format.js}"的内容。预期结果:浏览器接收到js,js代码在客户端运行,js将数据附加到页面上的表中。

  2. JS与资产中的ajax/javascript方式

    以json格式向客户端发送数据。js代码对服务器进行ajax调用,bowser从服务器接收json数据,js将数据附加到页面上的表中。

请解释一下这两种方式的优缺点。谢谢

我认为最好的方法是向groups_controller.rb中的另一个控制器操作(如groups#names)发出AJAX请求,并让该操作呈现JSON。

在诸如app/assets/javascripts/script.js之类的javascript资产中执行此操作,如下所示:

$('#get-group-names-button').live('click', function(event) {
  event.preventDefault();
  $.ajax({
    url: "/groups/names",
    type: 'post',
    data: {'groupId': 'whatever'}
  });
});

然后在groups_controller中

def names
  if group_names
    render :json => group_names, :status => 200
  else
    render :status => 400
  end
end

然后在客户端上使用jquery done()解析JSON响应,并使用javascript中所需的任何HTML格式附加数据。

这可以通过使用像Backbone.js这样的客户端框架和像handlebas这样的模板语言得到极大的帮助。

以下是Ryan Bates 制作的关于该主题的railscast