将SQL查询传递到Google Maps的JS数组中

时间:2010-12-24 20:20:35

标签: php javascript mysql arrays

我想将一个字段,城市,从MySQL数据库映射到Google地图。我在这里找到了一个很好的剧本,但是还没能让它发挥作用。

如果我将数组硬编码到位置(var locations = ['Seattle','New York')),它可以正常工作。将这个SQL数组传递给JS给我带来了问题。

我尝试了很多不同的东西,但我被困住了。现在我正在尝试getElementById,但没有骰子。任何帮助表示赞赏!感谢。

<?php
$server_name="localhost";
$db_user="sql_user";
$db_pass="password";
$db="mydb";

mysql_connect($server_name, $db_user, $db_pass);
mysql_select_db($db);

$sql = "SELECT city FROM posts";
$result = mysql_query($sql) or die ('Query Error: ' . mysql_error()); 
while ($results = mysql_fetch_array($result))
{
    $city[] = $results;
}

?>



<div id="map_canvas" style="width: 600px; height: 400px"></div> 

  <script type="text/javascript"> 

    var locations = document.getElementById("<?=$city?>");

    var mapOpt = { 
       mapTypeId: google.maps.MapTypeId.TERRAIN,
       center: new google.maps.LatLng(38.00, -100.00),
       zoom: 3
    };

    var map = new google.maps.Map(document.getElementById("map_canvas"), mapOpt);

    var geocoder = new google.maps.Geocoder();
    var index = 0;

    var geocoderFunction = function () { 
       geocoder.geocode({ 'address': locations[index] }, function (results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
             new google.maps.Marker({
                map: map, 
                position: results[0].geometry.location
             });             
          }

          // Call the geocoder with a 100ms delay
          index++;
          if (locations.length > index) {
             setTimeout(geocoderFunction, 100);
          }
       });
    }

    // Launch the geocoding process
    geocoderFunction();
  </script>

5 个答案:

答案 0 :(得分:1)

与名称一样,mysql_fetch_array会返回Array,而不是String。由于您将这些数组放在一个数组($city)中,所得到的($city)是一个包含数组的数组。 JSON和json_encode对此很好,但它不是你想要的。

你想要什么:

var locations = ["aa", "bb", "cc", "dd"];

你得到了什么:

var locations = [["aa"], ["bb"], ["cc"], ["dd"]];

或者

var locations = [{"city":"aa"}, {"city":"bb"}, {"city":"cc"}, {"city":"dd"}];

或其组合:)

你如何解决这个问题:

while ( $row = mysql_fetch_array($result, MYSQL_NUM) ) {
    $city[] = $row[0];
}

另外:json_encode返回其值。它不会通过引用改变其论点。所以只有json_encode(..)不会做任何事情。尝试:

$city = json_encode($city);

答案 1 :(得分:0)

您需要调用json_encode($ city)将数组从PHP对象转换为javascript可读格式。在javascript中使用JSON.parse将该字符串转换为javascript数组。

答案 2 :(得分:0)

这是有道理的。所以我现在在文件的顶部:

$sql = "SELECT gender FROM posts";
$result = mysql_query($sql) or die ('Query Error: ' . mysql_error());
while ( $row = mysql_fetch_array($result, MYSQL_NUM) ) {
    $city[] = $row[0];
}

$city = json_encode($city);

?>

  <div id="map_canvas" style="width: 600px; height: 400px"></div>

  <script type="text/javascript">

    var locations = JSON.parse($city);

但是,这会导致一个空白页面。语法中的某些东西是关闭的...但是什么?它看起来很好。

答案 3 :(得分:0)

您仍然应该打印$city var,因此PHP内容将打印成HTML而不是字符串'$ city':

var locations = JSON.parse($city);

检查页面源(CTRL + U)以查看PHP的输出。空白页面可能是因为Javascript语法错误=)

答案 4 :(得分:0)

知道了!我能够使用<?=$city_text?>;然后进行内爆($city_text = "['" . implode("','", $city) . "']";)以使数组正确传递。谢谢!