使用php填充javascript数组


Use php to populate javascript array

全部,我有以下代码:

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坐标以及一些其他值。假设我有三个条目,我想为它们创建标记。我如何将从数据库中获得的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,只输出lat坐标时。我得到以下输出:

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

这是我数组中的正确坐标。但是没有创建标记。关于下一步该做什么或者我做错了什么,有什么想法吗?

将数组从PHP传递到JavaScript的一种简单明了的方法是简单地将数组的echo版本json_encode

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

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

Maps.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()(这里没有什么棘手的(。

我就是这么做的。希望能有所帮助!

它就像回显php值一样简单
new Array(<?php echo $php_lat;?>, <?php echo $php_long;?>, icon0 etc...

我用这个javascript数组初始化创建了一个动态横幅。当javascript嵌入php中时,它可以很好地工作。

    <?php
      // This is our php array with URLs obtained from the server
      $urlsPHP = ["img/img01.jpg","img/img02.jpg","img/img03.jpg"];
      return = "
        //...Some HTML...
        <script type='text/javascript'>
        // Now we use this inside the javascript
        var urlsJavaScript = ".stripslashes(json_encode($urlsPHP)).";
        //...Some javascript style to animate the banner...
        </script>
      ";

      // if we print this:
      echo stripslashes(json_encode($urlsPHP));
      // We obtain:
      // ["img/banner/bak01.jpg","img/banner/bak02.jpg","img/banner/bak03.jpg"]
      // This is a good syntax to initialize our javascript array

      // if we print this:
      echo json_encode($urlsPHP);
      // We obtain:
      // ["img'/banner'/bak01.jpg","img'/banner'/bak02.jpg","img'/banner'/bak03.jpg"]
      // This is not a good syntax to initialize our javascript URLs array
?>