2009-11-02 92 views
0

我想將php變量插入到javascript中。如何將PHP變量轉換爲JavaScript變量?

這裏是斷碼:

var tokens = [<? 
$result = mysql_query("SELECT * FROM accounts ORDER BY id DESC") or die (mysql_error()); 
while ($row = mysql_fetch_array($result)) { 
$user_name = $row['user']; 
$user_id = $row['id']; 
echo "['$user_name','$user_id'],"; 
} 
?>] 
+1

這是個問題嗎?任何錯誤? – 2009-11-02 00:09:17

+0

我試圖快速澄清這個問題。希望Gully會證實這是他想要做的。 – 2009-11-02 00:39:21

+0

重複http://stackoverflow.com/questions/1663750/var-transfert-between-php-and-javascript/ – 2009-11-02 23:36:55

回答

4

使用PHP的json_encode &然後回顯出來JavaScript的直接,如:

$fruit = array("banana", "apple", "strawberry", "raspberry", "orange"); 
$json_fruit = json_encode($fruit); 

echo "var fruit = $json_fruit;"; 

編輯:我已經更新THI因爲它不是必需的,所以不再使用eval()。當我第一次回答這個問題時,我剛剛開始使用JSON。

+3

eval不是必須的,除非你試圖通過ajax把它作爲響應傳回去(在這種情況下,它應該繼續在js端)。 json_encode吐出一個有效的js對象/值。 – 2009-11-03 00:00:36

+1

-1對於不需要的'eval'。這表明你不明白JSON是什麼。 – 2011-05-13 14:32:11

+0

感謝您對此提醒。我更新了答案,因此不再使用eval()。 – Klinky 2011-05-14 13:49:54

1

PHP運行在服務器上。 JavaScript在客戶端上運行。

您可以從PHP生成JavaScript,但不能在JavaScript中運行PHP。

(這是值得在網絡上工作的各個組成部分,特別是HTTP,如何理解這一切更好的閱讀了。)

如果你想以響應客戶端瀏覽器的行爲不執行PHP操作重新加載整個頁面,調查'阿賈克斯'。

2

你這樣做:

echo "['$user_name','$user_id'],"; 

...這意味着它會產生這樣的:

[ ['a','b'], ['a','b'], ['a','b'], ['a','b'], ] 

注意,它總是以一個「」這是一個不正確的語法結束。

正確的語法是:

[ ['a','b'], ['a','b'], ['a','b'], ['a','b'] ] 

我不是一個PHP的人,但我會說這樣的事情會解決它:

var tokens = [<? 
$result = mysql_query("SELECT * FROM accounts ORDER BY id DESC") or die (mysql_error()); 
$i = 0; 
while ($row = mysql_fetch_array($result)) { 
$i++; 
$user_name = $row['user']; 
$user_id = $row['id']; 
echo "['$user_name','$user_id']"; 
if($i < sizeof($result)-1) // incorrect syntax, but you get the point 
    echo "," 
} 
?>] 
+0

啊,我想我錯過了這個問題是關於序列化PHP變量爲JavaScript。應該有一個內置的PHP函數來做到這一點(但我不是一個PHP的人,所以不知道它可能是什麼)。 – 2009-11-02 00:35:33

+0

是的,我在閱讀問題時首先提出了相同的錯誤^^真的,必須有一個函數在某處做這件事,但這也應該做到這一點。 – marcgg 2009-11-02 00:40:00

+0

只記得有一個'implode'函數可以將數組轉換爲分隔列表 - 應對尾隨逗號問題 - 但這需要一個數組來處理,無論如何,這可能比您現有的計數器方法創建更多的工作。 – 2009-11-02 00:45:30