- Wrap the content you want to refresh in a
<div>
tag and give it a meaningful class name or ID (e.g., auto--refresh). The class name (or ID) is arbitrary as you will see in later steps. For example:
<div class="autorefresh">
Put something here. It will get updated at a set interval.
<div> - Create a menu function in Drupal to map the AJAX calback:
function blockupdate_menu() {
$items = array();
$items[] = array(
'path' => 'blockupdate/update',
'callback' => 'block_update',
'type' => MENU_CALLBACK,
'access' => TRUE,
);
return $items;
} - Implement the function that assembles the data to get sent back to the browser:
function block_update() {
//The get_data() function is generic here
//Use this function to get the updated data for display
$html = get_data();
print drupal_to_js(array('html' => $html));
// The exit() call is critical!
exit();
} - Implement the client side callback function in jQuery:
function autoupdate() {
$.ajax(
{
type: "POST",
url: "blockupdate/update",
cache: false,
success: function(data) {
var result = Drupal.parseJson(data);
$("div.autorefresh").fadeIn("slow").html(result['html']);
}
});
} - Use the
setInterval
Javascript function to perform the auto refresh:
if( Drupal.jsEnabled ) {
$(document).ready(function() {
setInterval("autoupdate()", 5 * 60000);
});
}
Note that the first parameter is the jQuery callback function and the second parameter is the time that will elapse in between a refresh, in milliseconds.
That's all there is to it really! To debug the new functionality make sure you have Firebug extension installed in Firefox and watch the traffic do a full roundtrip with updated content. It's also a good idea to set your interval to no more than a few seconds at first to ensure everything is working properly. Don't forget to read my last post on some of the lessons I learned while exploring jQuery inside of Drupal.