将 PHP 设置传达给 Javascript 的最佳方式是啥?

Posted

技术标签:

【中文标题】将 PHP 设置传达给 Javascript 的最佳方式是啥?【英文标题】:What's the best way to communicate PHP settings to Javascript?将 PHP 设置传达给 Javascript 的最佳方式是什么? 【发布时间】:2011-05-29 11:20:29 【问题描述】:

当您构建一个使用 PHP 在服务器端设置设置的应用程序时,在页面加载时将这些设置传达给 Javascript 的最佳方式是什么?

为什么要在服务器端设置所有设置,而不是部分在客户端,部分在服务器端? 因为应用程序肯定是用 php 编写的,但 javascript 部分可能是用纯 Javascript、JS Prototype、jQuery、... 因此,这样我们就可以为整个应用程序保留一组 PHP 函数,独立于 Javascript 层。

我自己一直在考虑几个解决方案:

1.通过隐藏的表单域:

<input typ="hidden" name="settings" value="JSON encoded settings" />

缺点:

可在源代码中直接查看。 Input hidden 是用来提交隐藏数据的,不是用来获取数据的。

2。使用 Ajax

页面一加载,就会有一个 ajax post 请求到服务器来检索设置。

优点:

干净 客户端只能请求它需要的设置。

缺点:

较重的页面加载

3.直接通过源设置文件 (XML)

优点:

Javascript 和 PHP 代码完全解耦(关于设置)。

缺点:

设置文件被加载两次(服务器端 + 客户端)

4.还有什么?

编辑:为 2 号增加了一项优势

【问题讨论】:

根据设置设置变量的脚本标签到底有什么问题? @DampeS8N 你的意思是在服务器端输出那个脚本标签吗? 如果设置不是直接来自用户,只是来自配置文件,只需将它们回显到位于文件顶部脚本标记内的 JS 中。如果数据来自用户,或(用户可编辑)数据库。不要那样做。就像泰布罗所说的那样。 【参考方案1】:

yaml、json、xml等任何格式都可以,因为你可以用PHP读取并转换成各种格式。

在您的情况下,最好的解决方案可能是 json 格式的配置文件。您可以在需要时直接使用 JS 和 PHP 阅读。

Zend 框架有一个不错的JSON encoding/decoding component。

【讨论】:

我将了解 JSON 相对于 XML 的优势。目前应用程序的配置是 XML 格式(后端管理员也会从 XML 文件中加载设置)。 我已经在几个网站上进行了检查。有些人正在使用这种方法。例如 www.me.com 加载联系人(但这是安全的,因为您需要先登录) - DADU 3 小时前【参考方案2】:

php可以生成你知道的javascript...

<script type="text/javascript">
    var my_var = '<?php $my_var ?>';
</script>

【讨论】:

请阅读“为什么设置所有设置服务器端而不是部分客户端,部分服务器端?”在问题中。 只是不要对来自用户的内容执行此操作。或者 $my_var 最终可能看起来像 "'; alert('you pwned'); my_var = 'haha" DADU:你可以在任何地方使用这些 JS 变量。 jQuery、原型等。它们将是全局范围的,并且只要它们位于顶部就始终存在。 @DampeS8N 是的。最好的方法是创建一个 var appname_settings 以防止命名冲突。 是的。只是要格外小心数据的来源。

以上是关于将 PHP 设置传达给 Javascript 的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

将 PHP 变量传递给外部 JavaScript(或 jQuery)文件的最有效方法

PHP 或 Javascript - 如何设置表单提交之间的最短时间

将 JSON 数据从 php 传递给 html-data 属性,然后传递给 Javascript

关于给构造函数传达参数方法

如何将操作传达给 React 组件

将后台线程的结果传达给 Android 中的 Ui 线程的正确方法