如何使用AJAX将JS变量传递给控制器​​?

时间:2014-03-17 00:39:05

标签: javascript jquery ruby-on-rails ajax variables

如何使用AJAX将JS变量传递给控制器​​?

我正在使用Ruby 2.0和Rails 4。

我需要将JS函数获取的某个JS变量的值传递给控制器​​,将其作为DB中的记录添加,我目前使用多个数据表来显示信息,用户选择一行中的一行datatable并按下下一个按钮然后获取所选行的id并将其添加到DB中的表作为行和另一个数据表显示,事情是我不希望既不使用表单也不刷新页面,并且所有呈现的信息都是在启动时加载的,我做了一个" presave"在用户不知情的情况下,在每个步骤(数据表)中进行选择。

现在我可以在视图中获取所选行的值,然后在Hidden_​​field中显示,我需要获取控制器中hidden_​​field的值

我读过AJAX可以做的工作,但我之前没有使用ajax。

一些代码:

script.js (在咖啡中)

leaveAStepCallback =(obj, context) ->
  alert("Leaving step " + context.fromStep + " to go to step " + context.toStep);
  ret=false
  if (context.fromStep==1 and context.toStep==2)
    document.getElementById('selec1').value= fnGetIdsOfSelectedRows fnGetSelected(oTable1), oTable1 #//get selected rows
    ret=true
some_controller.rb 中的

需要一些像:

def pre_save
  if params[:step]=='1' #hidden_Field with step number
    @selrow=params[:selec1].to_s.split(',') #selected rows as '1,2,5,7'
    i=0
    while i<@selrow.length
      pr=@selrow.at(i).to_i #selected row number

      addp=PreSaveTable.new #table to record each selected row
      addp.id_row=pr
      addp.save #save as row in table 
      i=i+1
    end

  end

end

一些帮助?

1 个答案:

答案 0 :(得分:1)

  

我之前没有使用ajax

让我解释一下:


Asynchronous Javascript & XML

使用Javascript等技术发送Ajax请求,以便将请求发送到典型的HTTP请求范围之外的服务器。这意味着您可以创建伪&#34;直播&#34;功能 - 无刷新

JQuery使用ajax特别简单:

$.ajax({
    url: "your_endpoint",
    data: "your_serialized_data",
    success: function(data) {
        //code on success
    },
    error: function(data) {
        //code on error
    }
});

<强>代码

#javascript
$(document).on("event", "element", function(e){
    $.ajax({
       url: "controller/action", 
       data: $("hidden_field").val().serialize()
    });
});

#controller
def pre_save
  if params[:step] == '1' #hidden_Field with step number
    @selrow = params[:selec1].to_s.split(',') #selected rows as '1,2,5,7'
    i=0
    while i < @selrow.length
      pr=@selrow.at(i).to_i #selected row number

      addp=PreSaveTable.new #table to record each selected row
      addp.id_row=pr
      addp.save #save as row in table 
      i=i+1
    end

    respond_to do |format| 
       format.html 
       format.js #-> loads views/controller/pre_save.js.erb
    end

end

#app/views/controller/pre_save.js.erb
alert("Presave Complete!");