【问题标题】:How do I update javascript variables with new values which are changing in my database?如何使用数据库中正在更改的新值更新 javascript 变量?
【发布时间】:2011-04-19 17:15:58
【问题描述】:

我正在构建一个多人游戏,它使用 mysql 数据库来存储玩家的坐标位置,然后用于显示对手模型。

游戏在客户端使用一个javascript文件(milktruck.js),然后在服务器端使用一个php文件(xml_http_request.php)。

当数据库信息更新时,我的问题发生在尝试更新 javascript 变量(存储对手的坐标信息)时。

javascript 变量在 php 文件中声明,代码如下:

  echo "<script> var lla0php = $lla0; </script>";
  echo "<script> var lla1php = $lla1; </script>";
  echo "<script> var lla2php = $lla2; </script>";

然后在javascript文件中使用,勾选函数:prototype.tick,with:

  window['lla0_2']= lla0php;
  window['lla1_2']= lla1php;
  window['lla2_2']= lla2php;

如何使用新的数据库信息不断更新这些变量?

【问题讨论】:

  • 是的,我也注意到了

标签: php javascript mysql database


【解决方案1】:

Web 模型是无状态的,要做到这一点,您将不得不想办法克服这一点,并且可能会考虑编写一个抽象层来为您解决这个问题。

您要么需要持续轮询,要么查看其他基于 Web 的解决方案,这些解决方案允许服务器将数据“推送”回客户端并保持“开放通道”通信。例如,您的浏览器中的 Google Talk 或 Facebook 聊天。

【讨论】:

    【解决方案2】:

    你需要做的是使用 ajax。

    function requestCoord(){ $.ajax({ url: "your url", dataType : "json", type: "GET", success(val){ //get your php script to echo out a json string //and it will be in val window['lla0_2']= val.lla0php; window['lla1_2']= val.lla1php; window['lla2_2']= val.lla2php; } }); } setInterval(requestCoord, 1000);

    更新

    您可以使用html5 sockets.

    【讨论】:

    • @user671891:@locrizak 提供了一个很好的基本示例,说明了我在不断轮询更新时提到的内容。在此示例中,更新频率为一秒。你需要决定这是否足够。此外,使用 AJAX-(可以说,不是“持续开放的通信渠道”),您每秒只能发出这么多请求。如果您需要模拟运动,您可能还需要在陈旧数据和新数据之间进行插值,以给人一种运动的印象,而不是实体(敌人)“传送”到他们的新位置。
    • @KTF 是的,这没有意义,我脑子里放了个屁。我认为您应该研究 html5 套接字。我已经在我的答案中发布了链接。
    • 使用 ajax 解决方案,您能否一步一步告诉我如何实现。您提供的代码是否会放在 javascript 文件中,然后 requestCoord() 会在 tick 函数中被调用?如何让我的 php 脚本回显一个 json 字符串?我是否必须将任何文件添加到我的托管服务器以允许 ajax 运行?当您提到 html5 套接字时,这些只是一个更好的解决方案,还是上述 ajax 解决方案不起作用?
    • @user671891 html5 套接字将是完成此任务的更好方法,因为它是内置的,您不必每秒都获取值(或者无论您想要获取它的频率如何)我没有任何使用 html5 套接字的经验,但提供的链接有足够的信息让您上路。
    猜你喜欢
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 2013-03-18
    • 2018-02-14
    • 1970-01-01
    • 2018-07-12
    • 2022-12-05
    相关资源
    最近更新 更多