我必须使用javascripts渲染图表。但图表的数据在服务器中。谷歌搜索后我发现这可以通过使用服务器端scrpting语言,如PHP和客户端语言javascript或jquery来完成。
var php_data= $.parseJSON('<?php echo json_encode($chart_data); ?>');
上面的代码工作正常,我可以将服务器中的数据传送到客户端。
但我很好奇这是如何做到的,因为我们正在客户端读取服务器端变量,而我们在这里没有使用AJAX。这真是令人困惑,因为php代码在服务器中运行并且javascript正在客户端中运行。有谁知道这背后的理论? javascript如何访问服务器?
如果我们可以使用javascript访问php脚本中的任何变量,我们必须明确采取一些措施来确认php脚本的安全性。
答案 0 :(得分:3)
这是因为它执行的顺序。服务器端脚本首先执行(在服务器上)并生成发送到客户端的outout。因此,您可以使用服务器端代码在服务器上动态生成所有客户端脚本的一部分。这基本上就是你在这里所做的。
走另一条路 - 将数据从slient端传递回服务器端需要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变量,只是简单地打印了它的内容(此时 - 在PHP脚本中此点之后对$chart_data
进行的任何更改都将不< / strong>作为javascript变量反映在javascript中的版本中。
答案 1 :(得分:1)
RESTFul API's正是您所寻找的。提供的示例使用Zend PHP Framework,但您可以使用simple router执行相同操作并导出到JSON以供JS解析。
我要建议您使用RESTFul API和客户端路由进行更新的DOM渲染方法。 XMLHttpRequest的;一些用于快速原型制作的优秀框架是angular, knockout, backbone etc。
好处是客户端正在处理页面呈现而不是服务器,这使得服务器的内存消耗更加重要。