回声语句不起作用?似乎格式正确

时间:2019-05-28 17:52:43

标签: javascript php

我正在用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>';

?>

2 个答案:

答案 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)