我正在用PHP回显的javascript中创建一个对象,语法似乎是正确的,但这给了我一个错误。
我传递给对象的变量是字符串,并且尝试将它们放在引号中,等等。我还尝试创建一个JS函数来执行此操作,并且结果类似。
<?PHP
$TEDS = $db->query("
SELECT a.*
FROM TEDS a
");
//Add each TED location into a javascript array.
echo '<script type="text/javascript">';
while($TED = $TEDS->fetch_assoc())
{
echo 'var pos = {lat: '.$TED['latitude'].', lng: '.$TED['longitude'].'};'; //THIS ECHO STATEMENT IS THE ONE GIVING ME PROBLEMS.
}
echo '</script>';
?>
答案 0 :(得分:3)
您的一个纬度值很可能没有值,从而导致其打印如下内容:
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。不要只打印上面未过滤的值。在将数据打印在页面上之前,请确保数据是干净的。
答案 1 :(得分:0)
在循环之后,我会尝试写全文。这样,您可以构建完整的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)
。