php点击链接显示基于发送id的地图通过jquery post()

时间:2013-02-02 08:39:00

标签: php jquery mysql post

我的帖子()的结果只显示其他map.php生成的数据,但无法显示地图框。我通过post()发送id,它显示来自mysql数据库的确切php数据。只有地图div是emptry。以下是代码。

$(document).ready(function() {
    $(".mylink").click(function(){
        var $linkattr = $(this).attr("rel");
//      alert($linkattr);
        $.post("map.php", {myid:$linkattr}).done(function(data) {
            $("#mapcomeshere").html(data);
            evt.preventDefault();
        });
    });
});

我的map.php脚本是

<?php
include('db.php');

$myid = "25";//$_POST['myid'];
$result = mysql_query("select * from property Where Id = '" . $myid ."' AND status = 1");
$row = mysql_fetch_array($result);
echo $row['Id'] . " : " . $row['owner'] . " : " . $row['lnglat'] . $row['propertyadd']  ."<br>";

$maploc = $row['lnglat'];
$myadd = $row['propertyadd'];
?>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
  google.maps.event.addDomListener(window, 'load', function() {
    var map = new google.maps.Map(document.getElementById('map'), {
      zoom: 13,
      center: new google.maps.LatLng(24.893379,67.028061),
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    var infoWindow = new google.maps.InfoWindow;

    var onMarkerClick = function() {
      var marker = this;
      var latLng = marker.getPosition();
      infoWindow.setContent('<?php echo $myadd ?>');

      infoWindow.open(map, marker);
    };
    google.maps.event.addListener(map, 'click', function() {
      infoWindow.close();
    });

    var marker1 = new google.maps.Marker({
      map: map,
      position: new google.maps.LatLng(<?php echo $maploc ?>)
    });

    google.maps.event.addListener(marker1, 'click', onMarkerClick);
  });
</script>
hi
<div id="map"></div>

请帮助

1 个答案:

答案 0 :(得分:1)

我可以提出一些建议。

首先,您在代码中遇到了一个概念性问题:

  infoWindow.setContent('<?php echo $myadd ?>');

您需要了解PHP是在服务器上处理的,因此,它不能以这种方式直接由JavaScript执行。这样做,实际上是将infoWindow的内容更改为'&lt;?php echo $ myadd?&gt;'。

至于你的问题,我认为你通过AJAX响应返回所有代码是错误的。 JavaScript应该存在于页面中,并且map.php应该只返回数据,可能以JSON数据的形式返回,例如:

map.php:

// ... database stuff, then finally:
echo json_encode(array(
    'map' => array(
        'lat' => 67.028061,
        'long' => 24.893379,
        'zoom' => 13
    ),
    'infoWindowContent' => $myadd,
    //... etc
));

该JavaScript的其余部分属于$ .post()的回调。

    $.post("map.php", {myid:$linkattr}).done(function(data) {
        // Not this: $("#mapcomeshere").html(data);
        google.maps.event.addDomListener(window, 'load', function() {
            var map = new google.maps.Map(document.getElementById('map'), data.map);
            // ... setup event handlers, etc ...
        });
    });

这样做可以为您的代码提供更清晰的API。 map.php的职责只是为地图而不是JavaScript提供数据。 JavaScript就在一个地方。