使用PHP填充JavaScript数组

3
大家好,我有如下代码片段:
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 数据库。假设我有三个条目,我想为它们创建标记。我应该如何将从数据库中获取的纬度/经度传递给 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"}

我的数组中哪些是正确的坐标?没有创建任何标记。下一步该怎么做或者我做错了什么?

4个回答

7

将数组从PHP传递到JavaScript的一种简单而干净的方法是只需echo数组的json_encode版本即可。

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

我尝试将以下代码放入我的PHP中:<script type="text/javascript"> addPoints('0', <?php echo $lattitude;?>, <?php echo $longitude;?>, 'Content to open'); </script> 然后我更新了我的addPoints函数以接受这些参数。 - user1048676

3

PHP在发送给客户端之前在服务器上执行。因此,您可以执行以下操作:

newpoints[0] = new Array(<?php echo $lattitude;?>, <?php echo $longitude;?>, icon0, '地点', '打开的内容');

其中$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变量中使用,用于地图准备就绪。
然后,根据需要在地图上显示的坐标,您将它们作为参数传递给您的addPoints(),使用标准JavaScript(这里没有什么棘手的)。
这就是我会做的。希望能帮到你!

我有一个循环,也要在我的页面上显示这些东西。我将发送各种坐标。我需要像addPoints(<?php echo $i; ?>, <?php echo $lattitude;?>, <?php echo $longitude;?>, icon0, 'Place', 'Content to open')这样将变量传递给addpoints函数吗? - user1048676
我想我明白你的意思,但在给你长答案之前让我问一下:1)看起来你需要能够在用户与地图交互时传入新的坐标。是这样吗?2)我想你希望在需要时从服务器获取坐标,而不是在页面第一次下载时加载所有可能的坐标。是这样吗? - Ian
我的场景是这样的,假设我正在加载餐厅,有10个餐厅。我试图传递每一个餐厅的纬度/经度来创建标记。然后用户可能会选择酒吧,那么我就需要传递15个坐标等等。我试图从PHP脚本中完成这个操作,因为我还要处理邮政编码等其他事情。 - user1048676
请你能不能看一下我对原始帖子所做的修改?我尝试按照你的指示去做,但是我觉得还缺少了些什么。你有其他的想法吗? - user1048676
我建议在你的 addPoints() 函数中添加一些调试跟踪,以确保正确的值被传递到了你想要它们去的地方。如果你不熟悉 console,你应该去了解一下。它在 Chrome 中预装,但如果你使用的是 Firefox,你需要安装 Firebug 插件。然后,你可以使用类似于 console.log("My var: " + myVar) 的东西来查看方法中的实际值。看起来有些东西在 JS 方面出了问题,所以,看看你能找到什么。祝好运! - Ian
显示剩余3条评论

1

只需要回显 PHP 值即可。
new Array(<?php echo $php_lat;?>, <?php echo $php_long;?>, icon0 等...


0
我使用这个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
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接