我必须使用 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 变量的访问权限,而只是打印了它的内容(此时 - 在此之后对 PHP 脚本中的 $chart_data
所做的任何更改都将 不会作为 javascript 变量反射(reflect)在 javascript 的版本中。
关于javascript - 客户端脚本中的服务器端变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32811078/