在另一个内部使用变量

时间:2012-01-24 00:16:11

标签: javascript google-maps

我正在尝试通过PHP将值传递给Javascript函数但它不起作用,该值似乎没有经过。当我用静态文本替换变量时,它可以正常工作。

我正在通过像这样的PHP文件调用该函数。

<?php
if (!empty($data['geocode'])) {
    echo '<body onload="initializeGM(\'' . $data['geocode'] . '\');">';
} else {
    echo '<body>';
}
?>

$data['geocode']包含latlng字符串。

这是Javascript代码..

function initializeGM(geocode) {
  var myOptions = {
    zoom: 8,
    center: new google.maps.LatLng(geocode),
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}

我在JS函数中添加了一个alert(geocode)进行测试,它运行正常。

如何制作它以便我可以传递geocode变量并且它有效?

2 个答案:

答案 0 :(得分:3)

假设我已正确理解您的问题,geocode是一个PHP变量,您希望将其传递给JavaScript函数调用。如果是这种情况,则需要echo输出PHP变量的值:

new google.maps.LatLng(<?php echo($geocode); ?>);

但是,请注意LatLng constructor需要2个类型为Number的参数(以及一个可选的布尔参数),并且您只是尝试传入一个参数。虽然我可能完全误解了你的意图。

修改(见评论)

我没有注意到您将geocode作为参数传递给initializeGM函数。如果您实际上尝试将PHP变量传递给该函数,则需要修改对JavaScript函数的调用以使用PHP变量:

initializeGM(<?php echo($geocode); ?>);

上述“然而”段仍然适用。您的代码可能会在lng构造函数中undefinedLatLng时抛出错误。

再次修改(请参阅已编辑的问题)

乍一看,你应该看到它应该会产生某些内容(正如你所说geocode包含一个字符串):

<body onload="initializeGM('somelat,somelng');">

理论上没有任何问题(字符串将被传递到initializeGM),但问题是该函数需要两个类型为Number的参数,而不是一个String类型的参数:

<body onload="initializeGM(100, 200);"> <!--Use real lat-lng values here!-->

这需要更改JavaScript函数:

function initializeGM(lat, lng) { //2 arguments
    var myOptions = {
        zoom: 8,
        center: new google.maps.LatLng(lat, lng), //Pass 2 arguments to constructor
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}

答案 1 :(得分:1)

google.maps.LatLng构造函数至少需要两个参数lat:numberlng:number。你只传递了一个。

假设$data['geocode']看起来像1.234,5.678,请尝试这个......

  1. 将您的JS功能更改为

    function initializeGM(lat, lng) {
      var myOptions = {
        zoom: 8,
        center: new google.maps.LatLng(lat, lng),
        mapTypeId: google.maps.MapTypeId.ROADMAP
      }
      var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    }
    
  2. 将通话更改为

    <?php if (!empty($data['geocode'])) :
    $coords = explode(',', $data['geocode']);
    ?>
    <body onload="initializeGM(<?php printf('%.15f, %.15f', $coords[0], $coords[1]) ?>)">
    <?php else : ?>
    <body>
    <?php endif ?>