I want to update the chart drawn by jqPlot sequentially in time intervals.
My use case is such that the AJAX call returns only a single value. For e.g.:
Let me add to @charlietfl answer. When you use replot() it takes 2 times longer to redraw, rather than with destroying jqplot. So use destroy() to redraw plot.
$.jqplot('chart1', [storedData]).replot();
http://jsfiddle.net/zjjvm/ it takes 46sec to draw running sine using replot()
plot1.destroy();
plot1 = $.jqplot('chart1', [storedData])
http://jsfiddle.net/p9SbP/ it takes 25sec to draw the same using destroy()
You will need to store the data in an array then push new data to the array within each ajax call.
Here is a simple demo using a button to start the AJAX updates on a 3 second interval:
/* store empty array or array of original data to plot on page load */
var storedData = [3, 7];
/* initialize plot*/
var plot1;
renderGraph();
$('button').click( function(){
doUpdate();
$(this).hide();
});
function renderGraph() {
if (plot1) {
plot1.destroy();
}
plot1 = $.jqplot('chart1', [storedData]);
}
/* sample data for demo*/
var newData = [9, 1, 4, 6, 8, 2, 5];
function doUpdate() {
if (newData.length) {
/* used to pull new number from sample data for demo*/
var val = newData.shift();
$.post('/echo/html/', {
html: val
}, function(response) {
var newVal = new Number(response); /* update storedData array*/
storedData.push(newVal);
renderGraph();
setTimeout(doUpdate, 3000)
})
} else {
alert("All Done")
}
}
DEMO: http://jsfiddle.net/ZqCXP/