如何使用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
一些帮助?
答案 0 :(得分:1)
我之前没有使用ajax
让我解释一下:
使用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!");