通过PHP在JavaScript中按时间间隔查询MySQL

通过PHP在JavaScript中按时间间隔查询MySQL,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,基本上,我想使用外部PHP脚本查询MySQL数据库。我希望每2秒调用一次此脚本。这2秒的时间间隔由javascript jquery flot启动,如下所示: <script type='text/javascript'> var data = []; var dataset; var totalPoints = 50; var updateInterval = 1000; var now = new Date().getTime();

基本上,我想使用外部PHP脚本查询MySQL数据库。我希望每2秒调用一次此脚本。这2秒的时间间隔由javascript jquery flot启动,如下所示:

<script type='text/javascript'>
    var data = [];
    var dataset;
    var totalPoints = 50;
    var updateInterval = 1000;
    var now = new Date().getTime();

    function GetData() {
        data.shift();
        while (data.length < totalPoints) {
            var y;

            $.ajax({
                url: 'current_api.php', 
                success: function(currentValue){
                    y = currentValue;
                    console.log(y);
                },
            });

            var temp = [now += updateInterval, y];
            data.push(temp);
        }
    }

    var options = {
        ...
    }

    $(document).ready(function () {
        GetData();

        dataset = [
            { label: "CURRENT READING", data: data }
        ];

        $.plot($("#flot-line-chart"), dataset, options);

        function update() {
            GetData();

            $.plot($("#flot-line-chart"), dataset, options)
            setTimeout(update, updateInterval);
        }

        update();
    });
</script>
<?php
    require "dbCon.php";    // database credentials
    $databaseName = "MAIN";
    $tableName = "day"

    // OPEN MYSQL DATABASE CONNECTION IN PHP
    $dbs = mysql_select_db($databaseName, $con);

    // FETCH DATA FROM MYSQL DATABASE
    $sql = "SELECT value FROM $tableName ORDER BY id DESC LIMIT 1";
    $result = mysql_query($sql);

    header('Content-Type: application/json');
    while ($row = mysql_fetch_assoc($result)) {
        $currentValue = (int) round($row['value']);
    }
    echo json_encode($currentValue);

    // CLOSE THE DB CONNECTION
    mysql_close($con);
?>
我是AJAX新手,不知道我所尝试的是否可行。有人能帮我调试为什么得到空值吗?提前感谢。

您正在ajax脚本中调用current_api.php,没有任何数据。因此没有查询字符串,没有$\u GET['dbSelect'],也没有数据库。因此,json只包含一个未定义的变量NULL

除此之外,这是不正确的,您不能使用转义函数来清理用户提供的表名,您需要对照白名单检查它。

明白了

$.ajax({
      dataType: "json",//insert line: receive data from server to json
      url: 'current_api.php?dbSelect=123', //a method 
      /* a method other
     type:"GET",
     data:{dbSelect:dbSelect},
     url: 'current_api.php',
     */

      success: function(currentValue){
        y = currentValue[0];///edit code   y = currentValue
       console.log(y);
        },
      });
问题是在$.ajax中声明变量y和url。感谢和的提示

javascript应该是:

<script type='text/javascript'>
    var data = [];
    var dataset;
    var totalPoints = 50;
    var updateInterval = 1000;
    var now = new Date().getTime();
    var y;

    function GetData() {
        data.shift();
        while (data.length < totalPoints) {

            $.ajax({
                url: 'current_api.php?dbSelect=R9640E5F1E2', 
                success: function(currentValue) {
                    y = currentValue;
                    console.log(currentValue);
                },
            });

            var temp = [now += updateInterval, y];
            data.push(temp);
        }
    }

    var options = {
        ...
    }

    $(document).ready(function () {
        GetData();

        dataset = [
            { label: "CURRENT READING", data: data }
        ];

        $.plot($("#flot-line-chart"), dataset, options);

        function update() {
            GetData();

            $.plot($("#flot-line-chart"), dataset, options)
            setTimeout(update, updateInterval);
        }

        update();
    });
</script>
其中R9640E5F1E2是数据库;PHP保持原样:
现在转到另一个问题。。。javascripts中的查询字符串。

为什么使用while循环来获取查询结果,而它只能返回一行?为什么不使用HTTP缓存?带有eTag标头的HEAD查询。您可以优化您的SQL查询:从$tableName ORDER BY id DESC LIMIT 1中选择值您不应该转义给定给mysql的数据库名称\u SELECT\u db。您只需要转义被替换为SQL的字符串。打开开发者工具,转到网络选项卡,检查对AJAX请求的响应。确保它只包含您正在发送的JSON,而不包含任何其他内容。您需要将var temp和data.push行放入success函数中。用于$\u GET['dbSelect']的查询字符串运行良好。。。对不起,如果我没有包括其他PHP文件,处理这个项目的不同部分。我已经编辑了PHP代码以减少混淆…:感谢提醒,他的PHP发送内容类型:application/json header.$。ajax使用它来确定默认的数据类型。y=currentValue[0]上的[0]是否为默认值;有区别吗?我只是每隔2秒钟查询一行数据。据我所知,[]表示数组中的一个位置。在AJAX中也是这样吗?