2011-11-29 138 views
3

所有, 我有下面的代碼位:使用PHP來填充JavaScript數組

function addPoints() { 

newpoints[0] = new Array(41.45998, 87.59643, icon0, 'Place', 'Content to open'); 

    for(var i = 0; i < newpoints.length; i++) { 
     var point = new GPoint(newpoints[i][1],newpoints[i][0]); 
     var popuphtml = newpoints[i][4] ; 
     var marker = createMarker(point,newpoints[i][2],popuphtml); 
     map.addOverlay(marker); 
    } 
} 

有解決這個其他代碼在我的地圖上顯示的標記。但是這個值是硬編碼的。我有一個PHP/mySQL數據庫,其中包含緯度/長度座標以及其他一些值。假設我有三個我想創建標記的條目。我如何將我從數據庫獲得的lat/long的addPoints函數傳遞給我,以便我可以在此函數中正確使用它?

我更新了我的代碼看起來像在addPoints如下:

function addPoints(num, lat, long) { 
newpoints[num] = new Array(lat, long, icon0, 'Place', 'Stuff name'); 
alert("The newpoints length is: "+newpoints.length); 
for(var i = 1; i < newpoints.length; i++) { 
    var point = new GPoint(newpoints[i][1],newpoints[i][0]); 
    var popuphtml = newpoints[i][4] ; 
    var marker = createMarker(point,newpoints[i][2],popuphtml); 
    map.addOverlay(marker); 
} 
} 

我做這個調用這個函數:

<script> 
    addPoints('<?php echo json_encode($num_coordinates); ?>','<?php echo json_encode($lat_coordinates); ?>', '<?php echo json_encode($long_coordinates); ?>'); 
</script> 

它不工作,雖然。當我嘗試不將它傳遞給JavaScript,只輸出緯度座標例如。我得到以下輸出:

{"1":"40.59479899","2":"41.4599860"} 

哪些是我的數組中的正確座標。雖然沒有創建標記。關於下一步做什麼或我做錯什麼的想法?

回答

2

PHP在發送到客戶端之前在服務器上執行。爲此,如果你可以做這樣的事情:

newpoints[0] = new Array(<?php echo $lattitude;?>, <?php echo $longitude;?>, icon0, 'Place', 'Content to open');

$lattitude$longitude是你掏出你的數據庫和PHP的值。

當客戶端請求此頁面時,您的php代碼將執行,實際值將被插入到那些php標籤使其看起來像您提供的示例中,然後發送到客戶端。

如果您想在客戶端上使用JS更改這些值,或者從服務器獲取新的值,請告訴我,我將添加一個示例。

編輯:

好了,在您的意見光,這聽起來像你有幾種選擇。這裏有一個:

當用戶選擇一個類別(餐館,酒吧等)時,您將該類別作爲url參數傳遞並重新加載整個頁面,或者只是它的地圖部分(取決於您的設置,但可能會值得調查)。您的鏈接會是這個樣子:

http://www.your-domain-here.com/maps.php?category=bars

地圖。PHP是準備使用$_GET陣列趕類別:

$category = $_GET['category']; //'bars'

然後你的PHP從數據庫中抓住合適的位置數據(我會離開的那部分給你),並把它插在一個變量,你JS控制的地圖將可以使用:

//JS in maps.php - you could add this var to the window object 
// if you have separated js files... 
var locationCoords = <?php echo json_encode($arrayOfCoordinatesFromDB);?>; 

當客戶機上,你的頁面加載,它現在有座標的陣列來使用的地圖準備在locationCoords變量去。

然後,根據您需要在地圖上顯示的座標,將它們作爲參數傳遞給使用標準Javascript的addPoints()(這裏沒有任何棘手)。

這就是我該怎麼做的。希望有所幫助!

+0

我有一個循環,也顯示在我的網頁上的東西。我會發送各種座標。我需要將變量傳遞給像addPoints(<?php echo $ i;?>,<?php echo $ lattitude;?>,<?php echo $ longitude;?>,icon0,'Place')的addpoints函數, '打開內容')? – user1048676

+0

我想我會看到你要去的地方,但在給你長答案之前讓我問一下:1)當用戶與地圖交互時,你需要能夠傳遞新的座標。那是對的嗎? 2)我想你希望能夠在需要時從服務器獲取座標,而不是在第一次下載頁面時加載所有可能的座標。那是對的嗎? – Ian

+0

所以我的場景是說我正在加載餐廳,並有10個。我試圖傳遞每個人的經緯度來創建標記。然後用戶可能會選擇酒吧,然後我將不得不通過15座標等我試圖從PHP腳本內做到這一點,因爲我正在做其他東西與郵政編碼等 – user1048676

1

這與迴應php值一樣簡單。
new Array(<?php echo $php_lat;?>, <?php echo $php_long;?>, icon0 etc...

6

從PHP到JavaScript傳遞一個數組的簡單而乾淨的方法是簡單的echojson_encode版本的數組。

$array = array(1,2,3,4,5,6); 
echo 'var values = '.json_encode($array).';'; 
+0

我試圖把這個在我的PHP:<?腳本類型= 「文/ JavaScript的」> \t \t \t \t \t \t \t \t \t \t addPoints( '0',<?PHP的echo $ lattitude;>,,'打開內容'); \t \t \t \t \t \t \t \t \t然後,我更新了我的addPoints接受這些參數 – user1048676