当我点击地图中的标记时,如何在弹出窗口中获取描述

时间:2011-12-06 08:21:15

标签: php javascript mysql google-maps

我有两张桌子,我已经提到了它的字段, 1.事件:event_id,标题,位置,纬度,经度,地址,描述,链接 2. event_time:event_id,start_time,end_time,start_date,end_date,date

我已经给出了下面的地图代码,因为我在地图上点击特定标记时尝试获取弹出窗口。当我点击标记时它会显示弹出窗口,在弹出窗口中我们检索表格数据。 我所拥有的问题是,我能够从数据库中获取除描述之外的所有数据。但是当我试图检索描述时,地图不会显示出来。 下面还在代码中给出了从数据库中检索数据的方式。

<script src="http://maps.google.com/maps/api/js?v=3&sensor=false" type="text/javascript"></script>
<script type="text/javascript"><script language="javascript">
new google.maps.Size(32, 32), new google.maps.Point(0, 0),
 new google.maps.Point(16, 32));
 var center = null;
 var map = null;
 var markersArray = [];
 var currentPopup;
 var bounds = new google.maps.LatLngBounds();
 function addMarker(lat, lng, info) {
 var pt = new google.maps.LatLng(lat, lng);
 bounds.extend(pt);
 var marker = new google.maps.Marker({
 position: pt,
 icon: icon,
 map: map
 });
 var popup = new google.maps.InfoWindow({
 content: info,
 maxWidth: 500,

 });
 google.maps.event.addListener(marker, "click", function() {
     if (currentPopup != null) {
 currentPopup.close();
 currentPopup =null;

 }
 popup.open(map, marker);
 currentPopup = popup;

 });
  google.maps.event.addListener(popup, "closeclick", function() {

  currentPopup.close();
  currentPopup = null;
 });
 }

 function initMap() {
 map = new google.maps.Map(document.getElementById("map1"), {
 center: new google.maps.LatLng(12.972352762582736,77.59734949737549),
 zoom:60,
 mapTypeId: google.maps.MapTypeId.ROADMAP,
 mapTypeControl: false,
 mapTypeControlOptions: {
 style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR
 },
 navigationControl: true,
 navigationControlOptions: {
 style: google.maps.NavigationControlStyle.SMALL
 }
 });
 <?

$query=mysql_query("select * from events join event_time on (events.event_id=event_time.event_id) where events.isapproved='Y'");

 while ($row = mysql_fetch_array($query))
 {
 $title=$row['title'];
 $location=$row['location'];
 $sdate=$row['start_date'];
 $edate=$row['end_date'];
 $stime=$row['start_time']; 
 $end_time=$row['end_time']; 
 $lat=$row['latitude'];
 $lon=$row['longitude'];
 $address=$row['address'];
 $date=$row['date'];
 $de=$row['description'];
 $link=$row['link'];
 echo ("addMarker($lat,$lon,'$stime ".to."$end_time<br/><br/><b>$title</b><br/><br/>$address<br/><br/>$de<br/><a>$link</a>');\n");
 }
 ?>

 center = bounds.getCenter();
 map.fitBounds(bounds);
 }
 </script>

地图代码和检索数据并将其显示在一起。 如果有人知道,请帮我解决这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我建议在数据库中检查Description的值。是否有任何Javascript特殊值转义的字符?

例如,假设一条记录的Description值为:       你找不到比这个好的派对!

如果您在上面的addMarker行中将其替换为$ de,并且仅保留所有其他变量,则生成的Javascript行为:

addMarker($lat,$lon,'$stime to $end_time<br/><br/><b>$title</b><br/><br/>$address<br/><br/>You can't find a better party than this one!<br/><a>$link</a>');

请注意,“can not”中的撇号现在结束了Javascript字符串。 Javascript解释器看到的代码如下:

addMarker($lat,$lon,'$stime to $end_time<br/><br/><b>$title</b><br/><br/>$address<br/><br/>You can'
t find a better party than this one!<br/><a>$link</a>');

第一行是不完整的陈述,第二行以引号之外的$ de值的第二部分开头。

通常,几乎所有变量值都将首先解释为Javascript,然后解释为HTML。因此,您应该根据HTML约定和Javascript约定来转义它们,以确保它们不会破坏任何内容。