1

正常に表示される Google マップがあります (Google Maps API v3 - 以下のコードを参照)。コードは最初に次のようにメインの index.php に挿入されました:-

<script type="text/javascript">
code here....
</script>

これはインライン コードとして問題なく動作し、index.php 内で使用して、PHP コードから Google Maps API に変数を挿入することもできます。

コードが大きくなるにつれて、Google Maps API の JavaScript を分離して、整理のために外部ファイルにポップしたいと考えました。

私の最初の考えは、次のようにファイルを挿入することでした:

<script type="text/javscript" src="code/googlemaps.php"></script>

これでそのまま動作しますが、PHP コードを挿入しようとするとすぐに動作しません。PHPサーバーがリクエストをどのように処理するかはよくわかりませんが、jsファイルをPHPパーサーに渡し、PHPコードを解析し、解析されたphpを含むjsをブラウザーに戻す必要があると思います.

コードはによってトリガーされます

<body onload="initialize()">

メインの index.php 内 (javascript は初めてなので、ご容赦ください)。

完全を期すために、使用しているjsコードを次に示します。

    function initialize() {

    // Main Google Map view variables
    var mapOptions = {
        zoom: 6,
        center: new google.maps.LatLng(<?php echo $selected_lat . "," . $selected_lon; ?>),
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        noClear: true,
        panControl: true,
        panControlOptions: {
            position: google.maps.ControlPosition.TOP_RIGHT
            },
        zoomControl: true,
        zoomControlOptions: {
            style: google.maps.ZoomControlStyle.LARGE,
            position: google.maps.ControlPosition.TOP_RIGHT
            },
        scaleControl: true,
        scaleControlOptions: {
            position: google.maps.ControlPosition.BOTTOM_RIGHT
            },
        streetViewControl: false
    };

    // Display Google Map
    var map = new google.maps.Map(document.getElementById("map_canvas"),
    mapOptions);

    //Display Select Airport Marker
    var marker = new google.maps.Marker({
        position: new google.maps.LatLng(<?php echo $selected_lat . "," . $selected_lon; ?>),
        map: map,
        title:"<?php echo  $airport_name[$selected_airport]; ?> Airport Reference Point\na new line\nanother line"
    });

    // google.maps.Circle variables
    var seRangeOptions = {
        center: new google.maps.LatLng(<?php echo $selected_lat . "," . $selected_lon; ?>),
        fillOpacity: 0.3,
        fillColor: "blue",
        map: map,
        radius: <?php echo seradius; ?>,
        strokeColor: "#000000",
        strokeOpacity: 0.0,
        strokeWeight: 0
    };


    // display Google Maps circle
    serangecircle = new google.maps.Circle(seRangeOptions);
}

わかりました、問題は解決しました。これが私がやったことです、フィードバックを歓迎します、私はまだ学んでいます:) JavaScriptファイルに入れられた次のコード:

<?php session_start(); ?>
<?php echo 'var lat = "'.json_encode($_SESSION['lat']).'";';?>

これがすべて実行される順序については、まだ少しあいまいです。PHPがjavascriptファイルを解析し、PHP変数を挿入してから、ファイルをブラウザに返すと思いますか? また、Firebug などのユーティリティを使用すると、これが実際にどのように機能するかを確認できます。

また、ソースコードがブラウザーに表示される方法を整理しているように見えるjsファイルの上部に次のものを追加しました。

<?php header('Content-type: text/javascript'); ?>
4

1 に答える 1

1

問題は次の行である可能性があります。

 title:"<?php echo  $airport_name[$selected_airport]; ?> Airport Reference Point\na new line\nanother line"

JavaScriptは、文字列を継続す​​るために直接改行を受け入れません。複数行の文字列を返す\n場合は、を使用する必要があります。これにより、JavaScriptコードが破損します。title:"<?php echo $airport_name[$selected_airport]; ?> Airport Reference Point\na new line\nanother line"

str_replace()関数を使用して、すべての新しい行をに置き換えて\nみてください。また、 addslashes" ()を使用して、JavaScript文字列も壊さないようにしてください。

title:"<?php echo str_replace("\n", '\n', str_replace("\r",'', addslashes($airport_name[$selected_airport]))); ?> Airport Reference Point\na new line\nanother line"
于 2012-12-06T16:54:22.840 に答える