这只是一个想法,它可能不可行,谷歌搜索并且无法想出任何东西,我不认为我正在寻找它,我真的不知道如何说出问题,我会解释一下:
所以我在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数据用来使用呢?
我希望我正确地解释它,对不起,如果这是一种愚蠢的做法,我也会采取不同的方式做到这一点。
答案 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']
}));
}
}
根据您的需要,您可能希望将marker
和latLonV
对象插入到单独的数组中,以便以后获取它们。