index.html 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>Flot Examples: AJAX</title>
  6. <link href="../examples.css" rel="stylesheet" type="text/css">
  7. <script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
  8. <script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
  9. <script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
  10. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
  11. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
  12. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
  13. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
  14. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
  15. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
  16. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
  17. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
  18. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
  19. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
  20. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
  21. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
  22. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
  23. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
  24. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
  25. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
  26. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
  27. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
  28. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
  29. <script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
  30. <script type="text/javascript">
  31. $(function() {
  32. var options = {
  33. series: {
  34. lines: {
  35. show: true,
  36. lineWidth: 2
  37. },
  38. points: {
  39. show: true
  40. }
  41. },
  42. xaxis: {
  43. tickDecimals: 0,
  44. tickSize: 1
  45. }
  46. };
  47. var data = [];
  48. $.plot("#placeholder", data, options);
  49. // Fetch one series, adding to what we already have
  50. var alreadyFetched = {};
  51. $("button.fetchSeries").click(function () {
  52. var button = $(this);
  53. // Find the URL in the link right next to us, then fetch the data
  54. var dataurl = button.siblings("a").attr("href");
  55. function onDataReceived(series) {
  56. // Extract the first coordinate pair; jQuery has parsed it, so
  57. // the data is now just an ordinary JavaScript object
  58. var firstcoordinate = "(" + series.data[0][0] + ", " + series.data[0][1] + ")";
  59. button.siblings("span").text("Fetched " + series.label + ", first point: " + firstcoordinate);
  60. // Push the new data onto our existing data array
  61. if (!alreadyFetched[series.label]) {
  62. alreadyFetched[series.label] = true;
  63. data.push(series);
  64. }
  65. $.plot("#placeholder", data, options);
  66. }
  67. $.ajax({
  68. url: dataurl,
  69. type: "GET",
  70. dataType: "json",
  71. success: onDataReceived
  72. });
  73. });
  74. // Initiate a recurring data update
  75. $("button.dataUpdate").click(function () {
  76. data = [];
  77. alreadyFetched = {};
  78. $.plot("#placeholder", data, options);
  79. var iteration = 0;
  80. function fetchData() {
  81. ++iteration;
  82. function onDataReceived(series) {
  83. // Load all the data in one pass; if we only got partial
  84. // data we could merge it with what we already have.
  85. data = [ series ];
  86. $.plot("#placeholder", data, options);
  87. }
  88. // Normally we call the same URL - a script connected to a
  89. // database - but in this case we only have static example
  90. // files, so we need to modify the URL.
  91. $.ajax({
  92. url: "data-eu-gdp-growth-" + iteration + ".json",
  93. type: "GET",
  94. dataType: "json",
  95. success: onDataReceived
  96. });
  97. if (iteration < 5) {
  98. setTimeout(fetchData, 1000);
  99. } else {
  100. data = [];
  101. alreadyFetched = {};
  102. }
  103. }
  104. setTimeout(fetchData, 1000);
  105. });
  106. // Load the first series by default, so we don't have an empty plot
  107. $("button.fetchSeries:first").click();
  108. // Add the Flot version string to the footer
  109. $("#footer").prepend("Flot " + $.plot.version + " &ndash; ");
  110. });
  111. </script>
  112. </head>
  113. <body>
  114. <div id="header">
  115. <h2>AJAX</h2>
  116. </div>
  117. <div id="content">
  118. <div class="demo-container">
  119. <div id="placeholder" class="demo-placeholder"></div>
  120. </div>
  121. <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>
  122. <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>
  123. <p>
  124. <button class="fetchSeries">First dataset</button>
  125. [ <a href="data-eu-gdp-growth.json">see data</a> ]
  126. <span></span>
  127. </p>
  128. <p>
  129. <button class="fetchSeries">Second dataset</button>
  130. [ <a href="data-japan-gdp-growth.json">see data</a> ]
  131. <span></span>
  132. </p>
  133. <p>
  134. <button class="fetchSeries">Third dataset</button>
  135. [ <a href="data-usa-gdp-growth.json">see data</a> ]
  136. <span></span>
  137. </p>
  138. <p>If you combine AJAX with setTimeout, you can poll the server for new data.</p>
  139. <p>
  140. <button class="dataUpdate">Poll for data</button>
  141. </p>
  142. </div>
  143. <div id="footer">
  144. Copyright &copy; 2007 - 2014 IOLA and Ole Laursen
  145. </div>
  146. </body>
  147. </html>