0

我正在寻找一个页面,其中有一组按钮。这些按钮每个都与不同的 php 函数相关联(这些函数所做的事情必须在服务器端完成)。基本上,所有的编码都是在 php 中完成的。php 包含页面所需的所有对象、常量和所有信息。但是所有的动作都需要用户通过点击按钮来启动。

但是问题来了:如何有效地将这些 php 函数与我的按钮混合在一起?现在我正在使用 ajax、javascript 和 jquery,但我这样做的方式有争议,这就是我的意思:

var continueFight;
$("#playerAttack").click(function() {
    if (continueFight) {    
      AJAX actions here
    }

ajax 操作之一是 a $.post,指向以下页面:

<?php
//some fight calculations
if ($fightOver)
  echo "<script>continueFight=false</script>";
?>

上面做了一些php计算来决定战斗是否结束,如果是,则回显一些Javascript并(通过AJAX请求)返回到主页面,这将导致按钮停止运行在未来。

这感觉非常混乱。有没有更好的方法来混合 PHP 和按钮?

4

3 回答 3

3

我不明白为什么要回显脚本元素。只需回显一个值(例如,1或什么都没有),并根据响应从成功回调中执行:

<?php
//some fight calculations
echo $fightOver;
?>
var continueFight;
$("#playerAttack").click(function() {
    if (continueFight) {    
       $.post(url, {}, function(response) {
           continueFight = !!response; // cast response to boolean
       }
    }
})
于 2013-05-21T17:30:09.347 回答
2

您的方法与您假设的完全一样。您必须将您的 PHP 视为孤立的事件,而不是保持恒定记录的东西。假设你正在制作一个游戏。您将游戏状态和任何相关数据存储在玩家通用的数据库中,通常使用来回传递的令牌。

你的整个游戏的交互应该在客户端处理。我的意思是通过 ajax 向 php 发送请求的侦听器。PHP 应该只返回状态响应以用 js 解释,它不应该返回 html 或任何类似的愚蠢的东西。

您可以在您的 php 中添加规定以验证状态服务器端以防止 js 操纵,但这可能不是您现在非常关心的问题。

看起来其他人基本上都说了同样的话,但是有代码示例,所以我会在这里删减它。如果您有具体问题,请随时提问,我可能会更新。

编辑

状态响应类似于对象、表示布尔值的整数、整数范围、分数或任何其他用作简单响应以触发 javascript 中更复杂操作的东西。所以假设你有攻击。假设你向 PHP 发送请求,让它决定攻击是否成功,如果成功,它造成了什么样的破坏。您可能希望从 PHP 中得到这样的响应:

$response = array(
    'success' => 1,
    'damage' => 200,
    'enemy_id' => 4
);

echo json_encode($response);

来自 javascript,假设您的 jQuery ajax 成功将响应分配给data您,可以像这样评估响应:

//assume generically that this object represents the damagable players
var players = {
    0: {
        health: 200
    },
    1: {
        health: 300
    },
    2: {
        health: 30
    },
    3: {
        health: 750
    },
    4: {
        health: 10
    }
};

// and assume this is in your success function in your ajax call
if(data.success == 1)
{
    //successful attack. cause damage
    players[data.enemy_id].health -= data.damage;
    if(players[data.enemy_id].health <= 0)
    {
        // do something to kill enemy
    }
}

重点是,您应该向浏览器返回绝对最少的数据,并让客户端处理所有游戏动作。PHP 仅用于同步游戏或获取客户端不可用的资源。

于 2013-05-21T17:32:28.523 回答
1

不要将 JavaScript 块回显到页面。用 JavaScript 编写 JavaScript,并从 PHP 传回一个标志来告诉 S 要做什么:

JavaScript:

var continueFight;
$("#playerAttack").click(function() {
    if (continueFight) {    
        $.post('scriptname.php', function(data) {
            continueFight = data.continueFight;
        });
    }
});

PHP:

<?php

//some fight calculations

echo json_encode(array('continueFight' => !$fightOver));

这很容易。不幸的是,Ajax 需要大量的输入。

于 2013-05-21T17:31:18.000 回答