2

座標が保存されている MySQL データベースがあります。java-scriptとphpを使ってGoogleマップに表示したい。私が基本的にしなければならないことは、3秒ごとにデータベースから最後の行を抽出し、地図上のマーカーの位置を更新することです.

私が遭遇している問題は、java-script で自分の php 関数を呼び出すと、ページが読み込まれるときに 1 回だけ呼び出されることです。その後、それは呼び出されず、データベースに追加された後続の値は表示されません。

データベースから Java スクリプトに最後の行を定期的に取得するにはどうすればよいですか?

編集: 次のコードは div を 1 回だけ更新し、関数は毎秒呼び出されますが、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 に答える