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

我正在用 PHP 的 javascript echo'd 创建一个对象,语法似乎是正确的,但它给了我一个错误。


我传递给对象的变量是字符串,我尝试将它们放在引号等中。我也尝试创建一个 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>';


?>


繁星淼淼
浏览 270回答 2
2回答

达令说

您的纬度值之一很可能没有值,导致它打印如下内容:var pos = {lat:&nbsp; , 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) {&nbsp; 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。不要像上面那样只打印未经处理的值。在页面上打印之前,请确保您的数据是干净的。

大话西游666

我会尝试在循环之后写出全文。这样你就可以构建一个完整的 json 数组:<?PHP&nbsp;$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()) {&nbsp; &nbsp;$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).
打开App,查看更多内容
随时随地看视频慕课网APP