Reputation: 11
how can I use AJAX to pass JS variables to the controller?
I'm using Ruby 2.0 and Rails 4.
I need to pass the value of certain JS variable obtained by a JS function to a controller to add it as a record in DB, I'm currently using several datatables to display information, the user selects a row in a datatable and pressing the next button then get the id of the selected rows and add it to a table in the DB as a row and another datatable shown, the thing is I do not want neither to use forms nor that the page is refreshed, and that all information that is presented is loaded at startup in view, I do a "presave" of selection in each step (datatable) without the user knowing.
now I can get the values of the selected rows in the view and present then in a Hidden_field, i need to get the value that hidden_field in the controller
i have read than AJAX can do the work, but i've not worked with ajax before.
some code:
script.js (in coffee)
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
in some_controller.rb need some like:
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
[email protected](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
some help?
Upvotes: 1
Views: 392
Reputation: 76774
I've not worked with ajax before
Let me explain:
Ajax requests are sent with technology like Javascript to send requests to your server out of the typical HTTP request scope. This means you're able to create pseudo "live" functionality -- no refresh
Using ajax is especially simple with JQuery:
$.ajax({
url: "your_endpoint",
data: "your_serialized_data",
success: function(data) {
//code on success
},
error: function(data) {
//code on error
}
});
Code
#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
[email protected](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!");
Upvotes: 1