1

私のpost()の結果は、他のmap.phpから生成されたデータのみを表示しますが、マップボックスを表示できません。post()を介してIDを送信していますが、mysqlデータベースからの正確なphpデータが表示されます。マップdivのみが空です。以下はコードです。

$(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>

助けてください

4

1 に答える 1

1

私が提案できることがいくつかあります。

まず、コードに概念的な問題があり、次のように記述します。

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

PHP はサーバー上で処理されるため、この方法で JavaScript から直接実行することはできないことを理解する必要があります。これは文字通り、infoWindow の内容を '<?php echo $myadd ?>' に変更します。

あなたの質問については、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 はすべて 1 か所にあります。

于 2013-02-02T08:59:41.110 に答える