0

我可以从我的 MySQL 表中提取这些信息并显示我需要的信息,但我想要一些关于如何使用我拥有的当前代码每 5 秒左右刷新一次这些数据的帮助。

没有太多数据可以显示,就像在任何给定时间有 5 或 8 个标记一样。我已经包含了我用来提取数据的当前代码。我对 PHP/MySQL 很满意,但对 Google 地图很陌生。

<script type='text/javascript'>
//This javascript will load when the page loads.
jQuery(document).ready( function($){

        //Initialize the Google Maps
        var geocoder;
        var map;
        var markersArray = [];
        var infos = [];

        geocoder = new google.maps.Geocoder();
        var myOptions = {
              zoom: 8,
              mapTypeId: google.maps.MapTypeId.ROADMAP
            }
        //Load the Map into the map_canvas div
        var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
        map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

        //Initialize a variable that the auto-size the map to whatever you are plotting
        var bounds = new google.maps.LatLngBounds();

        //Initialize the encoded string       
        var encodedString;

        //Initialize the array that will hold the contents of the split string
        var stringArray = [];

        //Get the value of the encoded string from the hidden input
        encodedString = document.getElementById("encodedString").value;

        //Split the encoded string into an array the separates each location
        stringArray = encodedString.split("****");

        var x;
     for (x = 0; x < stringArray.length; x = x + 1)
        {
            var addressDetails = [];
            var marker;
            //Separate each field
            addressDetails = stringArray[x].split("&&&");
            //Load the lat, long data
            var lat = new google.maps.LatLng(addressDetails[1], addressDetails[2]);
            var image = new google.maps.MarkerImage(addressDetails[3]);

            //Create a new marker and info window
            var marker = new google.maps.Marker({
                map: map,
                icon: image,
                position: lat,
                content: addressDetails[0]
            });



            //Pushing the markers into an array so that it's easier to manage them
            markersArray.push(marker);
            google.maps.event.addListener( marker, 'click', function () {
                closeInfos();
                var info = new google.maps.InfoWindow({content: this.content});
                //On click the map will load the info window
                info.open(map,this);
                infos[0]=info;
            });




           //Extends the boundaries of the map to include this new location
           bounds.extend(lat);
        }
        //Takes all the lat, longs in the bounds variable and autosizes the map
        map.fitBounds(bounds);



        //Manages the info windows
        function closeInfos(){
       if(infos.length > 0){
          infos[0].set("marker",null);
          infos[0].close();
          infos.length = 0;
       }
        }

});
</script>

</head>
<body>
<div id='input'>

    <?php


    //Initialize your first couple variables
    $encodedString = ""; //This is the string that will hold all your location data
    $x = 0; //This is a trigger to keep the string tidy

    //Now we do a simple query to the database

    // DB  INFO CONNECTION IS HERE AND WORKS

    $result = mysql_query("SELECT * FROM `ulocation` WHERE `ul_lat`!='' AND `ul_long`!='' AND `ul_onduty`='1'",$db1);

    //Multiple rows are returned
    while ($row = mysql_fetch_array($result, MYSQL_NUM))
    {
        //This is to keep an empty first or last line from forming, when the string is split
        if ( $x == 0 )
        {
             $separator = "";
        }
        else
        {
             //Each row in the database is separated in the string by four *'s
             $separator = "****";
        }
        $status='0';
        $cadd  = sql::getval('cal_address', 'call', "WHERE    `cal_id`='$row[14]'");
        $num  = sql::getval('cal_num', 'call', "WHERE `cal_id`='$row[14]'");
        $pcond  = sql::getval('cal_pcond', 'call', "WHERE `cal_id`='$row[14]'");
        $list="$num $cadd";
        //Saving to the String, each variable is separated by three &'s
        $encodedString = $encodedString.$separator.
        "<table border=0 width='350' height='20' class='maincolm' cellpadding=0   cellspacing=0><td align=left valign=top><h2></h2></td><tr><td width=100%><font size=3  face=arial><p><b>".$row[2].
        "</b>".
        "<br>Address: $list".
        "<br>Call Type: $pcond".
        "<br><br>Lat: ".$row[5].
        "<br>Long: ".$row[6].
        "</td></table>".
        "</p>&&&".$row[5]."&&&".$row[6]."&&&".$row[8]."&&&".$row[14];
        $x = $x + 1;
    }        
    ?>

    <input type="hidden" id="encodedString" name="encodedString" value="<?php echo   $encodedString; ?>" />




  <? echo "<body oncontextmenu=\"return false\" style=\"overflow: hidden; \"   topmargin=0 leftmargin=0 rightmargin=0 bottommargin=0>";


  <div id=\"map_canvas\"></div>
  </body>
  </html>";

  ?>

4

1 回答 1

0
setInterval(function() {
  $.ajax({ url: '/my/site',
     data: {action: 'test'},
     type: 'post',
      success: function(output) {
         // change the DOM with your new output info
      }
  });
}, 300000); 

这将对您想要的任何页面运行 ajax 调用,每 5 分钟包含您想要的任何发布数据。

为了更清楚:

假设我们有一个名为的 PHP 页面refreshComments.php,它执行以下操作:

$result = mysql_query("SELECT * FROM `comments` WHERE `articleId` = $_POST['articleId']");
while($data = mysql_fetch_array($result)) {
    $output[] = $data;
}
echo json_encode($output);

它所做的是做那个简单的查询,并将它打印在一个JSON 对象中

在我们的 Javascript 中,我们有一个名为的页面scripts.js执行此操作:

setInterval(function() {
  $.ajax({ url: 'refreshComments.php',
   data: {articleId: '2'},
   type: 'post',
    success: function(output) {
      // dynamically append new comments
      console.log(output); // this just logs is
    }
  });
}, 300000); 

这个 JS 文件在做什么?每隔 300000 毫秒(或 5 分钟),它就会向 refreshComments.php 发送一个 ajax 请求。refreshComments.php 以新数据的 JSON 响应,在 success() 函数中,我们使用新数据。

于 2013-09-18T04:05:52.817 回答