2014-04-04 97 views
1
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); 
?> 

当我执行此代码时,出现以下错误:“$纬度未定义”。 var_dump($ latitude)没问题。我认为该脚本不承认$纬度,但我不知道为什么。任何帮助? 感谢使用php变量为javascript

+1

您好!不要忘记接受答案,你甚至可以得到2代表! – SomeKittens

回答

6

如果你编码成JSON,你需要正确地包装在引号(你不能叫内字符串的函数):

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

JSON是Javascript字面语法的一个子集,因此您不需要使用'JSON.parse' - 只需将结果直接替换为JS即可。 – Barmar

+1

它_returns_字符串,但是当您将其回显到网页中时,引号就不存在了。 – Barmar

+0

@Barmar我的错误,然后编辑。 – SomeKittens

4

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

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

更新:我莫名其妙地被忽视约json_encode是一个PHP调用...所以插值问题是一个有争议的问题,因为你只需要函数的输出连接成字符串的一部分。

+0

您需要确保将PHP函数'json_encode'的输出连接到JavaScript字符串。 –

+0

好抓,更新。谢谢! – Greg

1

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

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