2

我有一个 MySQL 数据库,其中保存了坐标。我想使用 java-script 和 php 在谷歌地图上显示这些。我基本上要做的是每 3 秒后从数据库中提取最后一行并更新我在地图上的标记位置。

我遇到的问题是,当我在 java-script 中调用我的 php 函数时,它在页面加载时只调用一次。之后它不会调用它,并且不会显示在数据库中添加的后续值。

我如何定期从数据库中获取最后一行到我的 java 脚本?

编辑:以下代码仅更新 div 一次,每秒调用一次函数,但 php 函数返回的值始终相同。

<html>

<?php
$con=mysqli_connect("localhost","*****","*****","gps");

function getLast(){
         $sql = "
                 SELECT longitude 
                      , latitude     
                   FROM gpstable
                  ORDER 
                     BY id DESC
                  LIMIT 1;
                ";

         $result = mysqli_query($GLOBALS['con'],$sql);
         $row = mysqli_fetch_row($result);

         $longi=$row[0];
         $lati = $row[1];
         return $longi .','. $lati;
}
?>


<script>
var t =setInterval(function(){changeDivContent()},1000);

function changeDivContent(){
        var phpadd= <?php echo getLast(); ?>;
        document.getElementById("content").innerHTML = phpadd;
}
</script>


<body>
        <div id="content">ABC</div>
</body>

</html>
4

1 回答 1

2

您可以使用 JavaScript 函数:

setInterval(function() {
    /* ajax code to get the last coodinate */
}, 3000);

编辑:您编辑了您的问题。每次调用 changeDivContent() 函数时,相同的值将进入“phpadd”。

每次要在 PHP 中进行查询时,都必须连接到数据库。

也许您可以创建一个 PHP 文件来返回最后一个坐标(以任何格式,如 JSON 或 HTML)。在主文件中,您使用 Ajax 调用另一个文件以获取最后的坐标。

根据 Moob 的评论, setTimeout 更好:

function myFunction()
{
    /* code here */
    setTimeout(myFunction, 3000);
}

myFunction();

您可以使用 JQuery 做什么的示例(在 JavaScript 中不知道):

<?php

// getCoordinatesAjax.php

$con = mysqli_connect("localhost","*****","*****","gps");

$sql = "SELECT longitude, latitude FROM gpstable ORDER BY id DESCLIMIT 1";

$result = mysqli_query($GLOBALS['con'],$sql);
$row = mysqli_fetch_row($result);

echo $row[0] .','. $row[1];




<!-- main.php -->

<script>

    function myFunction()
    {
        $.ajax({
            url: "getCoordinatesAjax.php"
        })
        .done(function(html) {
            $("#content").append(html);
        });

        setTimeout(myFunction, 3000);
    }

    myFunction();

</script>
于 2013-11-13T14:25:42.890 回答