Javascript Openlayers-将信息数组放入popupmarker

Javascript Openlayers-将信息数组放入popupmarker,javascript,openlayers,Javascript,Openlayers,我有一个到数据库(db)的连接。我从数据库中获取lon、lat和名称,并对其进行排序: while ($row_ChartRS = mysql_fetch_array($sql1)) { $latitude=$row_ChartRS['latitude']; $longitude=$row_ChartRS['longitude']; $bus_name =$row_ChartRS['short_name']; //echo $latitude.'--'.$longitude.'<br&g

我有一个到数据库(db)的连接。我从数据库中获取lon、lat和名称,并对其进行排序:

while ($row_ChartRS = mysql_fetch_array($sql1))
{
$latitude=$row_ChartRS['latitude'];
$longitude=$row_ChartRS['longitude'];
$bus_name =$row_ChartRS['short_name'];
//echo  $latitude.'--'.$longitude.'<br>';
echo  $bus_name;
但是,弹出标记中的名称对于所有标记都是相同的。i、 e.从db中提取的姓氏。有人能帮我吗?我已经花了整整三天的时间试图修复它

提前谢谢

一些评论:

  • 您发布的PHP代码完全不相关,因为它在任何地方都没有被使用
  • 对象
    名称
    位置
    不会在您发布的代码中的任何位置声明。它们包含什么
  • 在下面引用的代码中,您正在创建多个新的
    功能
    对象,但您将它们都指定给同一个属性(从而每次都覆盖该属性)。这是故意的吗

    //add info into box
    for (z in names) {
        feature.data.popup = new OpenLayers.Feature(new OpenLayers.LonLat(names[z]).transform(projLonLat,projMercator));
    }
    
  • 编辑: 这似乎是出问题的地方。您应该删除for…z循环,并将其替换为以下代码:

    //add info into box
    feature.data.popup = new OpenLayers.Feature(new OpenLayers.LonLat(names[k]).transform(projLonLat,projMercator));
    
    因为在PHP中,您使用相同的索引(
    $v
    )来填充两个数组,所以在javascript中使用相同的索引来读取它们是有意义的


    除此之外,在Javascript数组上使用for…in循环被认为是不好的做法。最好使用以下选项:

    for (k = 0; k < Locations.length; k += 1) {
        // your code
    }
    
    for(k=0;k
    我也遇到了同样的问题,我解决了它。。。 问题是覆盖 您不必在函数内部循环,请为函数执行循环,例如:

    function init(z)
    {
        feature.data.popup = new OpenLayers.Feature(new OpenLayers.LonLat(names[z]).transform(projLonLat,projMercator));
    }
    
    
    for (z in names)
    {
        init(z)
    }
    

    @谢谢你的回复。请查看上面的代码以了解它们是如何使用的。@user639439:感谢PHP代码。我已经更新了我的答案;如果您按照建议更改代码,它应该可以工作。
    function init(z)
    {
        feature.data.popup = new OpenLayers.Feature(new OpenLayers.LonLat(names[z]).transform(projLonLat,projMercator));
    }
    
    
    for (z in names)
    {
        init(z)
    }