[英]Server-side variables within client-side scripts
我不得不使用JavaScript繪制圖表。 但是圖表的數據在服務器中。 谷歌搜索后,我發現這可以通過使用服務器端的搜尋語言來完成,例如php和客戶端語言的javascript或jquery。
var php_data= $.parseJSON('<?php echo json_encode($chart_data); ?>');
上面的代碼運行正常,我可以將服務器中的數據發送到客戶端。
但是我很好奇這是如何實現的,因為我們正在客戶端讀取服務器端變量,而這里沒有使用AJAX。 這確實令人困惑,因為php代碼在服務器中運行,而javascript在客戶端中運行。 有人知道這背后的理論嗎? JavaScript如何訪問服務器?
如果我們可以使用javascript訪問php腳本中的任何變量,我們將必須明確采取一些措施來確認php腳本的安全性。
這是因為它執行的順序。 服務器端腳本首先執行(在服務器上)並生成發送到客戶端的中斷。 因此,您可以使用服務器端代碼在服務器上動態生成所有客戶端腳本的一部分。 這基本上就是您在這里所做的。
換種方式-將數據從平滑端傳遞回服務器端需要AJAX或類似方法,因為在客戶端腳本運行時服務器端腳本已經運行。
在安全性方面,javascript中唯一可用的服務器端變量是您顯式呈現為javascript變量/對象的變量。 (或者當然是通過API / AJAX調用公開的內容)。 在這種情況下,您可以通過說出javascript公開$chart_data
變量:
var php_data= $.parseJSON('<?php echo json_encode($chart_data); ?>');
如果您查看生成的頁面的源代碼,它不會提及$chart_data
,它將類似於
var php_data= $.parseJSON('[{"a": "1"}, {"b": "2"}]');
您尚未授予對PHP變量的訪問權限,而只是將其內容(作為JavaScript的版本顯示在此點-此點之后,PHP腳本中對$chart_data
任何更改都不會反映在javascript版本中) 。
RESTFul API是您的所需。 提供的示例使用Zend PHP Framework,但您實際上可以使用簡單的路由器並導出到JSON以供JS解析來完成相同的操作。
附帶說明一下,我建議您可能會轉向使用帶有RESTFul API和XMLHttpRequests的客戶端路由的DOM呈現的新方法。 快速原型的一些很好的框架是有角的,敲除的,骨架的 。
好處是客戶端要處理頁面渲染而不是服務器,這將使服務器的內存消耗留給更重要的任務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.