心痕610 2021-09-26 10:09 采纳率: 58.3%
浏览 116
已结题

html从mysql之中无法实时调出数据

各位有什么好的方法,从数据库调出数据实时显示到php页面上面折线图吗?
我通过定时器定时向后台发送请求,但是它每次刷新都会把以前的数据全部显示出来。或者我如何才能把以前的那部分数据去掉了。

img


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数据库图形</title>
</head>
<body>
    <div id="main" style="width: 600px;height:400px;"></div>
    <script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script type="text/javascript">
        //初始化
        var myChart = echarts.init(document.getElementById('main'));
        myChart.setOption({
            title: {
                text: 'test'
            },
            tooltip: {},
            legend: {
                data: ['销量']
            },
            xAxis: {
                data: []
            },
            yAxis: {},
            series: [{
                name: '销量',
                type: 'bar',
                data: []
            }]
        });
        //数据加载完之前先显示一段简单的loading动画
        //名字数组(实际用来盛放X轴坐标值)
        var names = [];
        //value数组(实际用来盛放Y坐标值)  
        var nums = [];
        function getJson() {
            console.log(1)
            $.ajax({
                type: "get",
                async: true,
                url: "1.php",
                data: {},
                //返回数据形式为json
                dataType: "json",
                //请求成功时执行该函数内容,result即为服务器返回的json对象       
                success: function (result) {
                    console.log(result)
                    // alert("连接成功");
                    if (result) {
                        for (var i = 0; i < result.length; i++) {
                            //挨个取出name并填入名字数组,这个xname是根据你在php那发过来的列表来的,下面那个ysh也是
                            names.push(result[i].xname);
                        }
                        for (var i = 0; i < result.length; i++) {
                            //挨个取出value并填入value数组
                            nums.push(result[i].ysh);
                        }
                        //数据都存进去了,就不需要加载动画了,所以这里把他隐藏
                        myChart.hideLoading();
                        //将图表渲染进容器里
                        myChart.setOption({
                            xAxis: {
                                data: names
                            },
                            series: [{
                                name: '销量', data: nums
                            }]
                        });
                    }
                },
                error: function (errorMsg) {
                    //请求失败时执行该函数
                    alert("图表请求数据失败!");
                    myChart.hideLoading();
                    console.log(errorMsg)
                }
            })
        }
        getJson();
     setInterval("getJson()",5000)
    </script>
</body>
</html>
  • 写回答

3条回答 默认 最新

  • 三火Sunfire 2021-09-27 12:03
    关注

    1.在push names时加个判断轮询时就不会一直往屁股后面加柱子了

    if (!names.length) {
       for (var i = 0; i < result.length; i++) {
          names.push(result[i].xname);
       }
    }
    

    2.把nums定义成局部变量,这样就可以保证图表内的数组是最新的且不会发生闪烁

    var nums = []
    for (var i = 0; i < result.length; i++) {
        nums.push(result[i].ysh);
    }
    

    望采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月5日
  • 已采纳回答 9月27日
  • 赞助了问题酬金 9月27日
  • 创建了问题 9月26日

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加