Reputation: 8617
Seems like periodically_call_remote
is deprecated in Rails 3, any ideas how to achieve the same functionality?
Upvotes: 23
Views: 11400
Reputation: 59
This is a very simple solution I came across
<head>
<script type="text/javascript">
setTimeout("location.reload();",20000);
</script>
</head>
Upvotes: 1
Reputation: 21
If you want to continue using prototype.js, so you can do what follows:
<%= content_for :js do %>
new Ajax.PeriodicalUpdater("mydiv",
"/controller/action",
{ frequency: 5,
method: 'get' })
<% end %>
More about Ajax.PeriodicalUpdater here.
Upvotes: 2
Reputation: 1031
This is what you need for a periodic ajax call, replace some_path with your own RESTful route:
<%= javascript_tag do -%>
$(document).ready(
function(){
setInterval(function(){
$.ajax({
url: "<%= some_path %>",
type: "GET",
dataType: "script"
});
}, 60000 );
});
<% end -%>
The index.js.erb file would look like this:
$('#mydiv').html("<%= escape_javascript( render( :partial => 'my_partial' ) ) %>");
Upvotes: 2
Reputation: 8617
I was searching for the right way to do it with Rails 3 but now I am confident that there is no equivalent to periodically_call_remote in Rails 3. To get the exact same functionality done with jQuery, I used:
$(document).ready(
function(){
setInterval(function(){
$('#mydiv').load('/controller/action');
}, 3000);
});
Upvotes: 25
Reputation: 11055
If you really want to use it, then you can install the legacy plugin which has this method:
http://github.com/rails/prototype_legacy_helper
Rails favors UJS now.
Check out these links for more info on UJS in Rails 3:
http://railscasts.com/episodes/205-unobtrusive-javascript
http://www.simonecarletti.com/blog/2010/06/unobtrusive-javascript-in-rails-3/
I did a short writeup on this in relation to prototype and the link_to_remote tag:
http://www.cowboycoded.com/2010/07/20/replacing-link_to_remote-with-ujs-in-rails-3-prototype/
Hope this helps!
Upvotes: 5
Reputation: 62648
Use setInterval
to periodically run a function which invokes an AJAX call. If you were doing it with jQuery, it might be something like:
var pollBackend = function() {
$.getJSON("/foo/bar/poll");
}
setInterval(pollBackend, 5000);
This would attempt to poll the given URL for JSON data every 5 seconds.
Upvotes: 3