My Rails app needs to retrieve an updated count from the server every minute.
I’m attempting to have a javascript timer reload the specific div where I display this count.
<%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js", "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js", "application", "refresh-timer" %>
You’ll notice at the end I include my refresh-timer.js, which is just a single call:
$(document).ready( function(){
setInterval(function(){ $('refreshable').load('/refreshable'); }, 3000);})
That ‘refreshable’ object corresponds to this in my status.html.erb view:
<div class="main">
<div id="refreshable">
<%= render :partial => 'refreshable' %>
</div>
Yes, there’s more in the “main” div, but it’s the div#refreshable that’s of interest.
Since the javascript is loading /refreshable, in my routes.rb I created a match:
match "refreshable" => "events#refreshable"
While I doubt that’s strictly the right thing to do here, I’m trying to simplify things to find why the javascript timer isn’t calling the action.
For a test that my jQuery was set up right, I replaced the innards of the setInterval function with a call to alert. That worked fine: every three seconds the alert popped up.
I’ve also examined the page in Safari’s development tools — there are no javascript errors being reported, no extraneous html coding errors — it’s all very clean (and pretty simplified as I tried to figure this out).
For now, as a fallback, I’ve added the meta call for an http-refresh every 10 seconds. Which allows me to watch in my development.log that this is the only call coming from the browser to the app.
I’d love troubleshooting tips for javascript/jQuery more than anything else. My current attempts to bugger things ups just to get something to fail and produce evidence of where things are going wrong also don’t work!
Your jQuery selector is wrong. Change this:
To this: