Here is a minimal example of how to update a DIV in a web page with content from a remote Sinatra server using jQuery AJAX.
On the Server end you want an action that generates some new content and just returns it as a string. Let's just get the current time:
get '/update' do
Time.now.to_s
end
In the client web page you need to include the jQuery library:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
You need a named DIV that will receive the content
<div id='update-div'></div>
Then you need to create your script block. You need a function that updates the DIV. update_time() calls the jQuery get function with two arguments. The first is the URL of the server action. The second is a function that is called on the returned data and the third is a type of data that the server will return, which is 'text' in our case.
Here we update the named DIV with the string returned from the server. Then we use the setTimeout function to wait 5 seconds, and then we call the function itself to repeat the process. That instance fetches content from the server, waits 5 seconds, calls itself, and so on.
At the start of the script block we add a call to ajaxSetup and set cache to false. This seems to be necessary for Internet Explorer which would otherwise cache the first value returned and keep using that instead of fetching new values.
Finally we make the initial call to the function when the document is first loaded and ready.
<script>
$.ajaxSetup ({
cache: false
});
$(document).ready(function() { update_time(); });
// fetch text from the server, wait 5 secs and repeat
function update_time() {
$.get("/update",
function(data) {
$("#update-div").html(data);
window.setTimeout(update_time, 5000);
},
'text');
}
</script>
The jQuery get function is a simplified wrapper around the ajax call.
That is all you need to have a DIV continually updated with remote content, in this case coming from Sinatra.
A collection of computer systems and programming tips that you may find useful.
Brought to you by Craic Computing LLC, a bioinformatics consulting company.
Friday, November 11, 2011
Subscribe to:
Post Comments (Atom)
Contributors
Archive of Tips
-
▼
2011
(44)
-
▼
November
(11)
- strsplit in R
- Running R scripts on the Command Line
- Deleting a File that starts with '-' on UNIX
- Plotting a simple bar plot in R
- Captain Beefheart Song Titles
- When jQuery $.ajax() keeps returning the same valu...
- Updating a DIV with jQuery and Sinatra
- Latest version of jQuery on Google APIs
- Sorting on multiple String keys in Ruby
- Manipulating Model/Table/Controller Names in Rails
- Parsing 96 / 384 well Plate Maps
-
▼
November
(11)
1 comment:
Is it possible to push the data from ruby, the route, rather than pull from javascript?
I need to do some lengthy processing in ruby. I'd like to periodically post. How do I do that?
Post a Comment