2014-04-04 159 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); 
    ';