Ajax 是一种不需要刷新页面就可以与服务器交换数据的方法。

关于 Ajax 相关的知识请参考 jQuery-AjaxjQuery-AJAX - W3SchoolAjax 教程

一、jQuery 中 Ajax 相关的函数

在 jQuery 中,有三种 Ajax 相关的方法,分别是:ajax、get、post。

1、jQuery.ajax

统一的发送 Ajax 请求函数,简单的使用示例如下:

  1. $.ajax({
  2. url: '请求地址',
  3. type: 'GET', // 请求类型,常用的有 GET 和 POST
  4. data: {
  5. // 请求参数
  6. },
  7. success: function(data) { // 接口调用成功回调函数
  8. // data 为服务器返回的数据
  9. }
  10. });

关于 jQuery.ajax 函数的详细使用请参考:jQuery 官方文档jQuery Ajax ajax() 方法

2、jQury.get

发送 get 请求,是 ajax 方法的简写方式。

  1. $.get(url, {
  2. // 参数
  3. }, function(data) {
  4. // data 为服务器返回的数据
  5. });

关于 jQuery.get 函数的详细使用请参考:jQuery 官方文档jQuery Ajax get() 方法

3、jQuery.post

发送 post 请求,是 ajax 方法的简写方式。

  1. $.post(url, {
  2. // 参数
  3. }, function(data) {
  4. // data 为服务器返回的数据
  5. });

关于 jQuery.post 函数的详细使用请参考:jQuery 官方文档jQuery Ajax post() 方法

二、实例说明请求数据并创建图表

下面我们用具体的实例来说明这个过程:

1、 创建服务器接口

  1. <?php
  2. // 指定返回格式为 JSON
  3. header("Content-type: text/json");
  4. // 获取当前时间,PHP 时间戳是秒为单位的,JS 中则是毫秒,所以这里乘以 1000
  5. $x = time() * 1000;
  6. // y 值为随机值
  7. $y = rand(0, 100);
  8. // 创建 PHP 数组,并最终用 json_encode 转换成 JSON 字符串
  9. $ret = array($x, $y);
  10. echo json_encode($ret);
  11. ?>

2、 初始化图表

  1. var chart = null; // 定义全局变量
  2. $(document).ready(function() {
  3. chart = new Highcharts.Chart({
  4. chart: {
  5. renderTo: 'container',
  6. type: 'spline',
  7. events: {
  8. load: requestData // 图表加载完毕后执行的回调函数
  9. }
  10. },
  11. title: {
  12. text: 'Live random data'
  13. },
  14. xAxis: {
  15. type: 'datetime',
  16. tickPixelInterval: 150,
  17. maxZoom: 20 * 1000
  18. },
  19. yAxis: {
  20. minPadding: 0.2,
  21. maxPadding: 0.2,
  22. title: {
  23. text: 'Value',
  24. margin: 80
  25. }
  26. },
  27. series: [{
  28. name: '随机数据',
  29. data: []
  30. }]
  31. });
  32. });

3、 调用数据接口并更新图表

  1. /**
  2. * Ajax 请求数据接口,并通过 Highcharts 提供的函数进行动态更新
  3. * 接口调用完毕后间隔 1 s 继续调用本函数,以达到实时请求数据,实时更新的效果
  4. */
  5. function requestData() {
  6. $.ajax({
  7. url: 'live-server-data.php',
  8. success: function(point) {
  9. var series = chart.series[0],
  10. shift = series.data.length > 20; // 当数据点数量超过 20 个,则指定删除第一个点
  11. // 新增点操作
  12. //具体的参数详见:https://api.hcharts.cn/highcharts#Series.addPoint
  13. chart.series[0].addPoint(point, true, shift);
  14. // 一秒后继续调用本函数
  15. setTimeout(requestData, 1000);
  16. },
  17. cache: false
  18. });
  19. }

三、注意事项

1、数据类型

注意请确保数据接口返回的数据是 JSON 对象的形式,如果返回的数据是 JSON 字符串,我们可以用 JS 转换一下,说明如下

Ajax 请求数据接口 - 图1
图3-1 JS 类型及 JSON 转换

即在 JS 中,用 typeof 来判断类型,字符串类型为 "string",对象类型为 "object"; 我们可以用 JSON.parse() 来将 JSON 字符串转换成 JSON 对象,用 JSON.stringify() 来将 JSON 对象转换成 JSON 字符串。

3、跨域问题

由 JavaScript 出于安全方面的考虑,不允许跨域调用其他页面的对象,所以在跨域调用数据接口时,我们需要注意跨域的问题。

关于跨域请大家自行了解相关的内容,我们也会在后面的教程中说明这个问题。

原文: https://www.hcharts.cn/docs/ajax