<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Flot Examples</title> <link href="layout.css" rel="stylesheet" type="text/css"> <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]--> <script language="javascript" type="text/javascript" src="../jquery.js"></script> <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script> </head> <body> <h1>Flot Examples</h1> <div id="placeholder" style="width:600px;height:300px;"></div> <p>Example of loading data dynamically with AJAX. Percentage change in GDP (source: <a href="http://epp.eurostat.ec.europa.eu/tgm/table.do?tab=table&init=1&plugin=1&language=en&pcode=tsieb020">Eurostat</a>). Click the buttons below.</p> <p>The data is fetched over HTTP, in this case directly from text files. Usually the URL would point to some web server handler (e.g. a PHP page or Java/.NET/Python/Ruby on Rails handler) that extracts it from a database and serializes it to JSON.</p> <p> <input class="fetchSeries" type="button" value="First dataset"> - <a href="data-eu-gdp-growth.json">data</a> - <span></span> </p> <p> <input class="fetchSeries" type="button" value="Second dataset"> - <a href="data-japan-gdp-growth.json">data</a> - <span></span> </p> <p> <input class="fetchSeries" type="button" value="Third dataset"> - <a href="data-usa-gdp-growth.json">data</a> - <span></span> </p> <p>If you combine AJAX with setTimeout, you can poll the server for new data.</p> <p> <input class="dataUpdate" type="button" value="Poll for data"> </p> <script type="text/javascript"> $(function () { var options = { lines: { show: true }, points: { show: true }, xaxis: { tickDecimals: 0, tickSize: 1 } }; var data = []; var placeholder = $("#placeholder"); $.plot(placeholder, data, options); // fetch one series, adding to what we got var alreadyFetched = {}; $("input.fetchSeries").click(function () { var button = $(this); // find the URL in the link right next to us var dataurl = button.siblings('a').attr('href'); // then fetch the data with jQuery function onDataReceived(series) { // extract the first coordinate pair so you can see that // data is now an ordinary Javascript object var firstcoordinate = '(' + series.data[0][0] + ', ' + series.data[0][1] + ')'; button.siblings('span').text('Fetched ' + series.label + ', first point: ' + firstcoordinate); // let's add it to our current data if (!alreadyFetched[series.label]) { alreadyFetched[series.label] = true; data.push(series); } // and plot all we got $.plot(placeholder, data, options); } $.ajax({ url: dataurl, method: 'GET', dataType: 'json', success: onDataReceived }); }); // initiate a recurring data update $("input.dataUpdate").click(function () { // reset data data = []; alreadyFetched = {}; $.plot(placeholder, data, options); var iteration = 0; function fetchData() { ++iteration; function onDataReceived(series) { // we get all the data in one go, if we only got partial // data, we could merge it with what we already got data = [ series ]; $.plot($("#placeholder"), data, options); } $.ajax({ // usually, we'll just call the same URL, a script // connected to a database, but in this case we only // have static example files so we need to modify the // URL url: "data-eu-gdp-growth-" + iteration + ".json", method: 'GET', dataType: 'json', success: onDataReceived }); if (iteration < 5) setTimeout(fetchData, 1000); else { data = []; alreadyFetched = {}; } } setTimeout(fetchData, 1000); }); }); </script> </body> </html>