2 回答
TA贡献1821条经验 获得超6个赞
您的纬度值之一很可能没有值,导致它打印如下内容:
var pos = {lat: , lng: 1234}
如果属性没有值,JavaScript 解析器会意外地看到逗号。这将极大地解释意外的逗号语法错误。
因此,首先,您不要手动构建 JSON。PHP 具有json_encode()将 PHP 数组转换为 JSON 的功能。使用它为您正确构建 JSON。
接下来,您的代码会pos重复打印,覆盖之前的值。如果您只关心最后一个值,请不要打印所有内容。如果您确实关心所有值,请将它们存储在一个数组中:
<?php
// Get your TEDS
$teds = $TEDS->fetch_assoc();
// Using array_map to convert the items from latitude-longitude to lat-lng.
$teds_array = array_map(function($ted) {
return ['lat' => $ted['latitude'], 'lng' => $ted['longitude']];
}, $teds);
// Serialize to JSON
$teds_json = json_encode($teds_array);
?>
// positions will be an array of objects with lat-lng.
var positions = <?php echo $teds_json; ?>
最后,小心XSS。不要像上面那样只打印未经处理的值。在页面上打印之前,请确保您的数据是干净的。
TA贡献1817条经验 获得超14个赞
我会尝试在循环之后写出全文。这样你就可以构建一个完整的 json 数组:
<?PHP
$TEDS = $db->query("
SELECT a.*
FROM TEDS a
");
//Add each TED location into a javascript array.
echo '<script type="text/javascript">';
$text = 'var positions = [';
while($TED = $TEDS->fetch_assoc()) {
$text .= '{lat: '.$TED['latitude'].', lng: '.$TED['longitude'].'},';
}
// remove last comma
$text = substr($text,0 , strlen($text)-2);
$text .= '];'
echo $text;
echo '</script>';
?>
另一种方法是将json_decode($TED).
- 2 回答
- 0 关注
- 269 浏览
添加回答
举报