Reputation: 12495
I would like to click a div on a page to run a certain number of javascript tasks, but also to run an action on a controller. To explain in greater detail:
I have a untitled.js file in which I have put a bunch of jquery code :
$(function(){
$('nav li').hover(function(){
$(this).addClass("bigger", 50);
}, function(){
$(this).removeClass("bigger", 50);
});
$('#notify').click(function(){
$('.notifications').show();
});
$('#notify').click(function(){
(some code to run a controller action)
});
});
I would like to run a controller action called "run_tasks" on the "Users" controller when the #notify button is clicked, as well as showing a notifications class. As you can see in the above code I have the jquery code for showing .notifications sorted out, but I don't know what to put in "(some code to run a controller action)". To provide information about the controller action, it will just run some tasks that I want to run, it doesn't redirect to a new page or anything. Here is the basic format of the users controller:
class UsersController < ApplicationController
....
def run_tasks
end
end
Is what I am trying to do possible, and if so what jquery code do I put in there? I'm using Rails 3.0.9 and the newest jquery.
Upvotes: 1
Views: 3659
Reputation: 31110
As long as you have a route for that controller action, you can cause it to run by simply issuing an ajax request to it with jQuery's $.get().
$('#notify').click(function(){
$('.notifications').show();
$.get('/users/run_tasks');
});
There's no need to do two $('#notify').click()
either, you can put the two statements in one block (as I have done in the code snippet above).
Note that in this case .get()
simply makes the request to call the controller action on the server and ignores the result, but you can also use it to handle data returned by the controller. Refer to the doc link above.
Upvotes: 5