2012-12-06 62 views
1

我有一個谷歌地圖顯示正常(谷歌地圖API V3 - 請參閱下面的代碼)。在最初的代碼插入到主index.php文件,如下所示: -谷歌地圖API和PHP集成問題

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

這工作細如內嵌代碼,我也可以用index.php文件中插入來自我的PHP代碼變量到谷歌地圖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內觸發(IM新的JavaScript所以請原諒)。

爲了完整這裏是使用js代碼IM:

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); 
} 

OK,問題解決了。下面是我做的,反饋的歡迎,我還在學習:)下面的代碼放入JavaScript文件:這一切都被執行的順序

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

還是有點模糊。我假設PHP解析JavaScript文件,插入PHP變量,然後將文件返回給瀏覽器?此外,Firebug等任何公用程序都會讓我看到這是如何在實踐中發揮作用的。

我也突然出現在js文件的頂部似乎整理向上的源代碼是如何顯示在瀏覽器過於以下幾點:

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

回答

1

的問題可能是這一行:

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

的JavaScript doen't接受換行符直接繼續這個字符串,你必須使用\n,如果title:"<?php echo $airport_name[$selected_airport]; ?> Airport Reference Point\na new line\nanother line"返回一個多行字符串,然後它會破壞JavaScript代碼。

嘗試使用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" 
+1

感謝的是,做更多的挖掘和檢查所產生的JS代碼在瀏覽器給我這個錯誤 - 通知:未定義變量:selected_lat在/var/www/j2plan/code/googlemaps.php在第6行注意:未定義的變量:selected_lon在/var/www/j2plan/code/googlemaps.php在第6行。我猜它是一個變量範圍問題?在這個實例中將變量從PHP傳遞到JavaScript的推薦方式是什麼? –

+0

在你提供的代碼中,我看不到你定義任何php變量,所以我猜你已經做到了。如果代碼位於php函數中,且變量來自全局作用域,則必須使用global關鍵字聲明該變量來自全局作用域:http://br2.php.net/manual/en/language.variables。 scope.php –