2010-08-31 60 views
25

在我的應用程序中,我嚴重依賴JavaScript來增強用戶界面,但所有數據都來自數據庫並由PHP處理。默認情況下,我用「回聲」語句來代替所需的值「及時」,例如:將參數從服務器端PHP傳遞到客戶端JavaScript的最安全方法

var myVariable = <?php echo $myVariableInPHP ?> 

然而,這並沒有打擊我,非常優雅,我很擔心這樣的代碼的穩定性和可維護性。

我在這裏有任何替代品嗎?

對於服務器端,我使用的是Symfony 1.4 PHP框架。

感謝,

+3

我可以評論一下我3歲多的問題是否是一個月的老問題的重複?這很有趣。 – 2014-06-02 16:39:27

+1

這可能真的讓你大開眼界,但是你的評論的答案已經在新的主題中發佈了......在你問之前!但嚴重的是,這個新問題有更好的答案和更多的觀點。這是正確的標誌。 – JPhi1618 2014-06-25 02:26:38

+1

我發現有趣的是,4年後寫出重複問題的人將其標記爲重複 – CreativeMind 2016-01-02 17:20:17

回答

36

我喜歡的方式是:

<?php 

$var = array(
    'prop1' => 'value1', 
    'prop2' => 'value2', 
    // ... 
); 

?> 
<script type="text/javascript"> 
    var varNameSpace = <?php echo json_encode($var); ?>; 

    alert(varNameSpace.prop1); // -> 'value1' 
</script> 

使用json_encode()確保傳遞給JavaScript中的值被轉義,並且很好格式化。使用公共變量容器還可以防止使用全局空間(窗口)。

+2

提及命名空間+1! – Petrogad 2010-08-31 21:17:26

4

您可能需要使用JSON對於這一點,這是很簡單的兩個PHP(檢查json_encode())和JavaScript的使用。

<script>之內使用是安全的 - 瞭解JavaScript的標籤和瀏覽器。請注意,PHP函數不編碼<>

一些示例PHP:

$user = (object) array("name"=>"Joseph", "age"=>29, "email"=>"[email protected]"); 
echo '<script type="text/javascript"> var user = '.json_encode($user).'; </script>'; 
2

我會嘗試使用JSON。這裏有一個鏈接給你,以解釋如何做到這一點。

http://php.net/manual/en/book.json.php

+2

小心解釋爲什麼我會下降? – 2010-09-04 17:57:13

1

您的第一個解決方案確實有效,但將客戶端代碼與服務器端代碼混合並不是一個好習慣。它是把JavaScript的在單獨的.js文件例如像

GET 
http://localhost/getProfile?username=$username 

POST 
http://localhost/getProfile/$username 

它將使用返回JSON對象最佳實踐(它沒有PHP)

我會首先創建一個API(寫文檔) json_encode。你可以使用json-p進行跨域通信。然後從例如Jquery您可以輕鬆獲取數據。

這樣你的JavaScript將保持乾淨。

+0

我用ExtJS應用程序來做這件事。這些小部件嚴重依賴於數據庫中的數據,全部使用JSON。然而,如果您的網站應該是安全的,您現在必須與CSRF抗爭。 – AutoSponge 2010-09-27 13:19:32

0

我更喜歡use_dynamic_javascript()幫手。關於它的「壞」事情是你必須更多地考慮分割渲染模板本身並將其配置爲單獨的請求。

相關問題