我正在尝试通过PHP将值传递给Javascript函数但它不起作用,该值似乎没有经过。当我用静态文本替换变量时,它可以正常工作。
我正在通过像这样的PHP文件调用该函数。
<?php
if (!empty($data['geocode'])) {
echo '<body onload="initializeGM(\'' . $data['geocode'] . '\');">';
} else {
echo '<body>';
}
?>
$data['geocode']
包含lat
和lng
字符串。
这是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
变量并且它有效?
答案 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
构造函数中undefined
为LatLng
时抛出错误。
再次修改(请参阅已编辑的问题)
乍一看,你应该看到它应该会产生某些内容(正如你所说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:number
和lng:number
。你只传递了一个。
假设$data['geocode']
看起来像1.234,5.678
,请尝试这个......
将您的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);
}
将通话更改为
<?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 ?>