|
<!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"></link> |
|
<!--[if IE]><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 id="source" language="javascript" 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> |
|
|