實現PHP HTML MySQL JavaScript(Ajax)與Echarts交互制作圖表並顯示於網頁上的功能


1 任務目的

該篇為實現PHP、HTML、MySQL、JavaScript(Ajax)、Echarts交互,利用PHP從MySQL中取出數據,利用Ajax響應,通過Echarts繪圖,並在HTML上顯示的功能而寫作。

代碼主體分為兩部分,包括PHP部分及HTML部分,其中每個部分可根據自己的需要進行補充。

注明:“---------”用於分塊,以便更加直觀的顯示代碼成分,並非表示注釋或有其他含義。

代碼運行於WampServer搭建的系統上,需實時連接數據庫。

 

2 主體代碼

2.1 PHP部分

<?php

        header("charset=UTF-8");        //設置字符編碼,避免切換網站時出現亂碼。

        $con = mysqli_connect("localhost", "$YourUserName", "$YourPassword", "$YourDataBase");        //$YourUserName:用戶名; $YourPassword:密碼; $YourDataBase:選擇的數據庫.

        mysqli_set_charset($con, "utf8mb4");        //設置數據庫編碼,避免提取數據時無法讀取。

        $sql = "SELECT * FROM TableName";        //TableName:選擇的數據庫中表的名稱。

        $result = mysqli_query($con, $sql);        //讀取表中數據。

        $data = array();        //設置$data為數組,用於存儲從表中讀取的數據。

------------------------------------------------------------------------------------------------------------------------

        class System{        //假設該表中有三個字段,該類的創建用於放置這三個字段的內容。

                public $date;         //放置日期;

                public $a;        //放置字段1;

                public $b;        //放置字段2;

                }

        while($row = mysqli_fetch_array($result)){        //循環,依次讀取$result中每一行數據。

                $alter = new System();        //創建System中的對象,具有放置三個字段的能力。

                $alter -> date = $row['Date'];        //讀取日期值;

                $alter -> a = $row['ar1'];        //讀取字段1值;

                $alter -> b = $row['ar2'];        //讀取字段2值;

                $data[] = $alter;        //用數組$data存儲結果;

        }

 -----------------------------------------------------------------------------------------------

        $BD = json_encode($data);        //響應HTML中的ajax部分;
        echo $BD;
        exit();
?>

 

2.2 HTML部分

<!DOCTYPE html>

<html>

---------------------------------------------------------------------------------------------------

<head>

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />       <!--設置字符編碼,避免亂碼或切換網頁時出現源代碼-->

        <script src="https://cdn.staticfile.org/echarts/4.7.0/echarts.min.js"></script>       <!--引入Echarts庫,可通過網址在線引入-->  

        <script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script>       <!--引入jquery,用於設置ajax聯系PHP部分的數組-->

</head>

--------------------------------------------------------------------------------------------------

<link rel = "stylesheet" type = "text/css" href = "YourCSSFileName.css"/>        <!--CSS文件用於修飾HTML頁面-->

--------------------------------------------------------------------------------------------------

<body background="/images/YourBackgroundImage.jpg">        <!--背景圖片-->        

        <div id = "container" style = "width:100%;height:900px;background:#fff"></div>       <!--設置Echarts畫圖容器,賦予寬、高、背景顏色等屬性-->

----------------------------------------------------------------------------------------------------------------

        <script type = "text/javascript">       <!--JavaScript標簽,用於Ajax聯系與Echarts圖表屬性設置-->

        var mychart = echarts.init(document.getElementById("container"));       <!--引入Echarts變量-->

        var arr1 = [], arr2 = [], arr3 = [];       <!--引入三種數組分別用於存儲Ajax聯系的PHP部分中的$data部分的數據-->

        function getusers(){       <!--設置Ajax聯系函數-->

                $.ajax({       <!--設置Ajax聯系-->

                type:"post",       <!--設置“post”方法-->

                async:false,       <!--設置同步或異步傳輸-->

                url:"System.php",       <!--設置PHP路徑-->

                data:{},       <!--設置數據-->

                dataType:'json',       <!--設置數據類型為json-->

                success:function(result){       <!--設置傳輸成功函數-->

                        console.log(result);       <!--調試json的內容,並將其傳輸至頁面上

                        if(result){       <!--讀取由PHP部分的json_encode通過Ajax響應的數據-->

                                for(var i = 0;i < result.length;i++){       <!--循環讀取各字段存儲數據-->

                                        arr1.push(result[i].date);       <!--獲取date對應的數據並存儲至arr1中-->

                                        arr2.push(result[i].a);       <!--獲取a對應的數據並存儲至arr2中-->

                                        arr3.push(result[i].b);       <!--獲取b對應的數據並存儲至arr3中-->

                               }

                       }

                },       <!--語句結束后別忘了加逗號-->

               error:function(errmsg){       <!--顯示Ajax連接錯誤的情況-->

                       alert("Ajax獲取服務器數據出錯了!" + errmsg);        <!--輸出結果以顯示錯誤情況-->

               }

       });

       return arr1,arr2,arr3;        <!--返回三個數組存儲的數據-->

       }

       getusers();        <!--調用函數,應用Ajax響應-->

----------------------------------------------------------------------------------------------------------------------       

       <!--設置Echarts圖表屬性,下圖為平滑折線圖,具體實例見網址:https://echarts.apache.org/examples/zh/index.html,點開實例有相應代碼-->

       var option = {        <!--設置圖表屬性-->

               tooltip : {        <!--顯示鼠標滑過圖表時的顯示框-->

                       trigger: 'axis',

                       axisPointer: {

                       type: 'cross',        <!--設置交叉顯示框-->

                       label: {

                               backgroundColor: '#6a7985'        <!--設置背景顏色-->

                       }

                       }

               },

               title:{        <!--設置圖表標題-->

                       text:"你的圖名",        <!--圖表標題-->

                       x: 'center',        <!--設置圖表標題位置-->

                       y: '7px',        <!--設置圖表標題垂直偏移量-->

                       textStyle: {        <!--設置字體屬性-->

                               color: '#000000',       <!--設置字體顏色-->

                               fontSize: 35        <!--設置字體大小-->

                       }

               },

               xAxis: {        <!--設置X軸屬性-->

                       type: 'category',

                       data: arr1,        <!--設置X軸數據-->

                       axisLabel: {        <!--設置X軸屬性-->

                               color: '#000000',        <!--設置坐標軸字體顏色-->

                               fontSize: 35        <!--設置坐標軸字體大小-->

                       },

                       splitLine: {        <!--設置垂直X軸網格線屬性-->

                               show: true,        <!--是否顯示網格線選項-->

                               lineStyle:{        <!--設置網格線線條屬性-->

                                       color: ['#EDEDED'],        <!--設置網格線顏色屬性-->

                                       width: 3,        <!--寬度-->

                                       type: 'solid'        <!--類型-->

                               }

                 },

                       axisTick: {        <!--設置坐標軸刻度-->

                               inside: true        <!--設置刻度位於內或外-->

                       },

               },        <!--語句、每一項屬性最好都要加上逗號>

               yAxis: {

                       type: 'value',

                       axisLabel: {

                               color: '#000000',

                               fontSize: 35

                       },

                       splitLine: {

                               show: true,

                               lineStyle:{

                                       color: ['#EDEDED'],

                                       width: 3,

                                       type: 'solid'

                               }

                 },

                      axisTick: {

                               inside: true

                       },

             },

             series: [        <!--設置數據系列-->

             {

                     data: arr2,

                     type: 'line',

                     smooth: true,        <!--設置是否平滑屬性-->

               }

               ]

           };

----------------------------------------------------------------------------------

       mychart.setOption(option);        <!--設置並運行option-->

----------------------------------------------------------------------------------

</script>

</body>

</html>

 

3 結果及討論

3.1 步驟及功能

(1)PHP的日期字段讀取MySQL數據;

(2)MySQL數據聯系Ajax傳輸至JavaScript中;

(3)Echarts繪圖庫的引入,繪制字段變量隨時間(日期)變化的平滑折線圖;

3.2 實現結果截圖

 

注:使圖像中出現多條線,可通過增加Series中“{}”數據序列完成,但要保證序列的長度與時間長度一致。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM