0

这只是一个想法,它可能不可行,谷歌搜索并无法提出任何建议,我认为我没有正确搜索它,我真的不知道如何表达这个问题,所以我'会解释它:

所以我从 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;
}

});

当然地图会毫无问题地出现并且第一个位置出现,但是我如何获取存储在其中的 JS 数据markerVar并使用它呢?

我希望我解释正确,对不起,如果这是一种愚蠢的做法,我也愿意接受不同的做法。

4

1 回答 1

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对象插入到单独的数组中,以便稍后获取它们。

于 2013-01-24T10:21:36.360 回答