我有两个常量值lat1和lng1。 现在我想在 JavaScript 中获取这些值,但我无法做到这一点。在 php 之外使用脚本时,它可以工作,但在 php 中使用时它不起作用。我正在尝试显示带有距离的谷歌地图,这就是为什么我必须使用 while 循环从我的数据库中获取一些值。帮帮我。下面给出了我的 php 代码
**
$qry="SELECT * FROM markers";
$run= mysqli_query($connect,$qry);
while($row=$run->fetch_array()){
$lat2=$row["lat"];
$lng2=$row["lng"];
echo "$lat2"."and"."$lng2"."<br>";
echo '
<script>
var lat1=<?php echo $lat1; ?>;
var lng1=<?php echo $lng1; ?>;
var lat2=<?php echo $lat2; ?>;
var lng2=<?php echo $lng2; ?>;
var R = 6371;
var rlat1 = lat1.toRadians();
var rlat2 = lat2.toRadians();
var rlng1 = lng1.toRadians();
var rlng2 = lng2.toRadians();
// var diflat= (lat2-lat1).toRadians();
// var diflng = (lng2-lng1).toRadians();
var x = (rlng2-rlng1) * Math.cos((rlat1+rlat2)/2);
var y = (rlat2-rlat1);
var d = Math.sqrt(x*x + y*y) * R;
document.write(d);
</script>
';
}
脚本中存在错误
echo '
<script>
var lat1=<?php echo $lat1; ?>;
考虑一下,关闭 PHP 标签并编写简单的 HTML,然后根据需要返回,如下所示
?>
<script>
var lat1=<?php echo $lat1; ?>;
您的整个代码将如下所示:
<?php
$qry="SELECT * FROM markers";
$run= mysqli_query($connect,$qry);
while($row=$run->fetch_array()){
$lat2=$row["lat"];
$lng2=$row["lng"];
echo "$lat2"."and"."$lng2"."<br>";
?>
<script>
var lat1=<?php echo $lat1; ?>;
var lng1=<?php echo $lng1; ?>;
var lat2=<?php echo $lat2; ?>;
var lng2=<?php echo $lng2; ?>;
var R = 6371;
var rlat1 = lat1.toRadians();
var rlat2 = lat2.toRadians();
var rlng1 = lng1.toRadians();
var rlng2 = lng2.toRadians();
// var diflat= (lat2-lat1).toRadians();
// var diflng = (lng2-lng1).toRadians();
var x = (rlng2-rlng1) * Math.cos((rlat1+rlat2)/2);
var y = (rlat2-rlat1);
var d = Math.sqrt(x*x + y*y) * R;
document.write(d);
</script>;
<?php
}
?>
只需像这样替换您的代码:
<?php
$qry="SELECT * FROM markers";
$run= mysqli_query($connect,$qry);
while($row=$run->fetch_array()){
$lat2=$row["lat"];
$lng2=$row["lng"];
echo "$lat2"."and"."$lng2"."<br>";
echo '
<script>
var lat1='.$lat1.';
var lng1='.$lng1.';
var lat2='.$lat2.';
var lng2='.$lng2.';
var R = 6371;
var rlat1 = lat1.toRadians();
var rlat2 = lat2.toRadians();
var rlng1 = lng1.toRadians();
var rlng2 = lng2.toRadians();
// var diflat= (lat2-lat1).toRadians();
// var diflng = (lng2-lng1).toRadians();
var x = (rlng2-rlng1) * Math.cos((rlat1+rlat2)/2);
var y = (rlat2-rlat1);
var d = Math.sqrt(x*x + y*y) * R;
document.write(d);
</script>
';
}
?>
echo '<script>
var lat1='.$lat1.';
var lng1='.$lng1.';
var lat2='.$lat2.';
var lng2='.$lng2.';
var R = 6371;
var rlat1 = lat1.toRadians();
var rlat2 = lat2.toRadians();
var rlng1 = lng1.toRadians();
var rlng2 = lng2.toRadians();
// var diflat= (lat2-lat1).toRadians();
// var diflng = (lng2-lng1).toRadians();
var x = (rlng2-rlng1) * Math.cos((rlat1+rlat2)/2);
var y = (rlat2-rlat1);
var d = Math.sqrt(x*x + y*y) * R;
document.write(d);
</script>
';
我改变的是删除嵌套的PHP标签。相反,您应该将回显的字符串与点(PHP echo(连接起来。这可能无法保证您的工作映射,但至少会使您的PHP变得正确。