0

我正在编写一个简单的 JS 游戏。游戏有一些选项,可以在管理中设置并存储在 MySQL 数据库中。但是,我不确定将这些选项发送到 javascripts 的最佳方式是什么。

假设我有一些游戏模型对象,它具有初始化游戏的功能。

var someGame = {
    init : function(options){
        this.difficulty = options.difficulty;
        this.numberOfMonsters = options.numberOfMonsters;
        // ....
    }
}

它有选项参数,这些选项来自数据库。我应该如何将这些选项添加到游戏中?

我有一些想法,但我想在这里提出你的建议。

  1. 我可以使用 AJAX 检索选项,但我会通过 1 个额外请求来支付
  2. 我可以将 PHP 中的选项作为 javascript 变量回显并从 HTML 代码中调用该函数,但根据我阅读的内容,应该将 JS 分开。
  3. 我可以创建 JSON 对象,但同样,它将混合 JS 和 HTML。也许如果我将 JSON 输出到一些不可见的 HTML 元素中,然后通过 JS 解析它,它可以工作,但不确定它是否是好方法。
  4. 我可以创建一些空的 HTML 元素并将选项存储在它的“data-”属性中。
  5. 我可以使用 PHP 动态创建 JS 文件,但值得吗?我只需要填写几个动态变量
  6. ???

谢谢

4

3 回答 3

1

对于这种情况,选项 1、2 和 3 通常都很好。

如果您从 PHP 生成页面并且变量/数据可用,那么我认为在 HTML 中包含这样的内容是非常好的:

<script>
yourScript.init(<?php echo json_encode($javascriptParameters); ?>);
</script>

尽管您将 JS 代码与 HTML 分离是完全正确的,但将 JS 放入 HTML 中以执行此类初始化任务是很常见的,并且是完全可以接受的解决方案。

于 2013-06-01T21:16:32.090 回答
0

选项 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 内联在脚本标签中。

于 2013-06-01T21:24:14.213 回答
0

选项 6 - 如果您不反对放弃 MySQL 数据库,则可以使用Firebase之类的东西,您可以直接从 JavaScript 与它进行交互。这很好,因为它消除了 PHP 后端的额外层,您只使用它来访问数据。如果您对此选项感兴趣或对此有任何疑问,请告诉我。

于 2013-06-01T21:31:19.097 回答