将php变量用于javascript

时间:2014-04-04 19:44:22

标签: javascript php

class Map
{
public $Id;
public $longitudes;
public $latitudes;
public $lat_init;
public $lng_init;
public static function createMap($Id){
    global $latitude, $longitude;
    $dbh = Database::connect();
    $query = "SELECT * FROM `cartes` WHERE Id=? ";
    $sth = $dbh->prepare($query);
    $sth->setFetchMode(PDO::FETCH_CLASS, 'Map');
    $sth->execute(array($Id));
    if ($sth->rowCount() === 0) return NULL;
    $map=$sth->fetch();
    $sth->closeCursor();
    $lat=$map->latitudes;
    $lng=$map->longitudes;
    $latitude=unserialize($lat);
    var_dump($latitude);
    $longitude=unserialize($lng);
    echo'<script type="text/javascript">'
    ,'var lat =  json_encode($latitude); 
      var lng =  json_encode($longitude);   
      draw(lat,lng);
        '

    ,'</script>';

}  
}
<?php 
$dbh=Database::connect();
Map::createMap(6);
?>

当我执行此代码时,会出现以下错误:&#34; $ latitude未定义&#34;。 var_dump($ latitude)没问题。我认为剧本不能识别纬度,但我不知道为什么。有帮助吗? 感谢

3 个答案:

答案 0 :(得分:6)

如果您将其编码为JSON,则需要正确地将其包装在引号中(您无法在字符串内调用函数):

echo '<script type="text/javascript">
        var lat = '. json_encode($latitude). '; 
        var lng = '. json_encode($longitude). ';   
        draw(lat,lng);
      </script>';

答案 1 :(得分:4)

使用PHP,单引号用于字符串文字,并将使用变量的名称而不是其值。如果要插值(将变量的值插入字符串),则需要使用双引号。

echo '<script type="text/javascript">',
    "var lat = ". json_encode($latitude)  .";
     var lng = ". json_encode($longitude) .";   
     draw(lat,lng);",
'</script>';

更新:我在某种程度上忽略了关于json_encode作为PHP调用的部分......所以插值问题是一个没有实际意义的问题,因为你只需要将函数的输出连接到字符串中。

答案 2 :(得分:1)

在引用的字符串中不调用函数。你需要连接它:

echo '<script type="text/javascript">
      var lat =  ' . json_encode($latitude) . ';
      var lng =  ' . json_encode($longitude) . '; 
      draw(lat,lng);
     ';