2

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

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

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

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

问题:

在用户请求后最好做什么:

  1. JS.ERB方式

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

  2. 以资产/javascript方式使用ajax的JS

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

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

4

1 回答 1

3

我想说做到这一点的最好方法是向另一个控制器动作发出 AJAX 请求,就像groups#names你的那样,groups_controller.rb并让该动作呈现 JSON。

在 javascript 资产中执行此操作,例如app/assets/javascripts/script.js

$('#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 解析该 JSON 响应,done()并使用您在 javascript 中需要的任何 HTML 格式附加数据。

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

这是由Ryan Bates制作的关于该主题的railscast

于 2013-10-29T01:43:22.687 回答