将PHP生成的JS变量发送到Google地图的JS函数

时间:2013-01-24 10:13:39

标签: php javascript jquery google-maps

这只是一个想法,它可能不可行,谷歌搜索并且无法想出任何东西,我不认为我正在寻找它,我真的不知道如何说出问题,我会解释一下:

所以我在PHP中从这样的表中提取我的位置数据:

$result = $Connect->query($sql);
$i = rand(00000000, 99999999);
while($locationData = $result->fetch_assoc()){
    $locationName = $locationData['locationName'];
    $locationStreetAndHouse = $locationData['locationStreetNameAndNumber'];
    $locationState = $locationData['locationState'];
    $locationLat = $locationData['locationLatitude'];
    $locationLon = $locationData['locationLongitude'];
    $returnThis .= 'var latLonV'.$i.' = new    google.maps.LatLng('.$locationLat.','.$locationLon.')
var marker'.$i.' = new google.maps.Marker({
position: latLonV'.$i.',
map: map,
title: "'.$locationName.'"
});';
$i++;
}
$Connect->close();  

然后我把它发回给我的JS:

$JSONData = array("true", $returnThis); 
echo json_encode($JSONData); 

然后在JS中我这样做:

success:function (recievedData) {
  if (recievedData[0] == 'true') {
    initializeMap(recievedData[1]);
  }

}


function initializeMap(markerVar) {
    var myLatlng = new google.maps.LatLng(40.915117, -74.072465);
    var mapOptions = {
        zoom: 16,
        center: myLatlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    var map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);

    var marker = new google.maps.Marker({
        position: myLatlng,
        map: map,
        title: 'THIS IS ME!'
    });

    markerVar;
}

});

当然地图会出现没有问题,第一个位置会出现,但是如何将markerVar中存储的JS数据用来使用呢?

我希望我正确地解释它,对不起,如果这是一种愚蠢的做法,我也会采取不同的方式做到这一点。

1 个答案:

答案 0 :(得分:2)

目前,您创建了一个包含JavaScript代码的字符串。之后,您通过JSON对此字符串进行编码,将其传输给客户端。

但是在这里你不执行它,但尝试将其作为字符串传递。

更好的方法是在PHP中创建一个对象数组,如下所示:

$returnVal = array();
while( /*...*/ ) {
  /* your init code */

  $returnVal[] = array( 'lat' => $locationLat, 'lon' => $locationLon /* etc */ );
}

echo json_encode( array( true, $returnVal ) );

在客户端上,您可以使用这些值动态生成所有标记:

function initializeMap(markerVar) {
  /* your init code */

  var marker = [], latLonV;
  for( var i=markerVar.length; i--; ) {
    // create the latlon object
    latLonV = new google.maps.LatLng( markerVar[i]['lat'], markerVar[i]['lon'] )

    // set the marker
    marker.push(new google.maps.Marker({
                         position: latLonV,
                         map: map,
                         title: markerVar[i]['title']
                       }));
  }
}

根据您的需要,您可能希望将markerlatLonV对象插入到单独的数组中,以便以后获取它们。