将动态选项传递给javascript
passing dynamic options to javascript
我正在编写一个简单的JS游戏。游戏有一些选项,可以在管理中设置并存储在MySQL数据库中。但是,我不确定将这些选项发送到javascript的最佳方式是什么。
假设我有一个游戏模型对象,它具有初始化游戏的函数。
var someGame = {
init : function(options){
this.difficulty = options.difficulty;
this.numberOfMonsters = options.numberOfMonsters;
// ....
}
}
它有选项参数,这些选项来自数据库。我该如何在游戏中呈现这些选择?
我有一些想法,但我想听听你的建议。
- 我可以使用AJAX来检索选项,但我会为此付出1个额外的请求
- 我可以把PHP中的选项作为javascript变量,并从HTML代码调用函数,但根据我所读到的,JS应该分开。
- 我可以创建JSON对象,但再次,它将混合JS和HTML。也许如果我将JSON输出到一些不可见的HTML元素,然后通过JS解析它,它可以工作,但不确定这是否是一个好方法。我可以创建一些空的HTML元素,并将选项存储在它的"data-"属性中。 我可以动态地创建JS文件使用PHP,但它是值得的吗?我只需要填充几个动态变量
- ? ?
谢谢
对于这种情况,选项1、2和3通常是非常合适的。
如果你是从PHP生成的页面和变量/数据是可用的,然后,我认为这是完全好的,包括这样的东西在你的HTML:
<script>
yourScript.init(<?php echo json_encode($javascriptParameters); ?>);
</script>
虽然你把JS代码从HTML中分离出来是很正确的,但是把JS放到HTML中来做这样的初始化任务是很常见的,也是一个完全可以接受的解决方案。
选项2是最有效的。它没有对服务器的额外请求,并且当您需要它时,数据已经在页面中了。
您知道您的页面需要这些服务器选项。您不妨从数据库中获取它们,并将它们放在页面的javascript中,当您构建该页面时,它们可以立即使用,而不会延迟等待ajax调用。
将它们放在页面中没有缺点。我不确定你想要实现的JS分离是什么。你的选项是JS代码,他们将在你的页面脚本。我更熟悉的分离是,你不希望javascript代码混入HTML(例如内联事件处理程序)。这不是那个。您将脚本数据与其他脚本一起放入脚本标记中。这不是问题。
下面是对你提出的每个想法的评论:
1)使用AJAX检索选项
正如你所说,这是一个额外的要求。这个额外的请求会减慢页面的初始化时间,并使服务器为该页面提供服务的请求增加一倍。除非您通常不需要这些数据,或者除非您需要向请求传递一些参数,而这些参数只能从客户端检索,否则根本不需要通过ajax检索这些数据。
2)将PHP中的选项回显为javascript变量
除非您通常不需要这些数据,并且在服务器端检索成本很高,或者除非您需要向请求传递一些参数,而这些参数只能从客户端检索,否则在页面呈现时将数据放入页面是最有效的。如果你把它们作为脚本变量,那么你仍然有HTML/JS分离。您可能应该创建一个对象,并将每个数据值作为该对象的属性,以减少对顶级名称空间的污染。
3)创建JSON对象没有理由使用基于文本的JSON格式,当你可以把它们作为一个直接的javascript对象,就像在上面的选项。
4)创建一些空的HTML元素
没有理由我知道把这些数据在你的HTML,而不是在你的JS。这样就不必要地把HTML和JS混在一起了。 5)动态创建JS文件没有理由创建一个单独的JS文件。只需将这一小部分JS内联到脚本标签中。
选项6 -如果你不反对放弃MySQL数据库,你可以使用像Firebase这样的东西,在那里你可以直接从JavaScript与它交互。这很好,因为它消除了PHP后端中仅用于访问数据的额外层。如果你对这个选项感兴趣或者有任何问题,请告诉我。
- 如何使Javascript动态html表及其上的事件
- 使用JavaScript动态插入DIV的成本有多高
- Javascript动态变量(添加了随机数)
- JavaScript-动态SVG-onload属性-未触发事件
- 传递给 PHP 表单时 JavaScript 动态变量上的未定义索引
- 如何在没有ajax的情况下将javascript动态数据发送到php变量
- 使用javascript动态创建html内容/元素
- 带有多个答案选项的Javascript动态数组窗口
- JavaScript:动态扩展原型是一种糟糕的做法
- Javascript+动态菜单+当前链接样式(CSS)+基于PHP的网站
- javascript动态内容与选择长运行脚本
- Javascript:动态更改CSS文件+Cookie
- 使用javascript动态计算top属性
- 使用javascript动态选择幻灯片放映的图像
- 如何访问用javascript动态生成的textarea的文本内容
- Javascript动态表,每个单元格都有一个onmouse事件
- Php,Javascript-动态表单id's和动态验证
- JavaScript动态附加到搜索字段
- 如何将CSRF令牌添加到javascript动态生成的表单中
- 从Javascript动态构建JSON对象列表