2011-11-29 86 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