用按钮编写交互式PHP

时间:2013-05-21 17:25:05

标签: php javascript jquery ajax

我正在寻找创建一个包含一组按钮的页面。这些按钮分别绑定到不同的php函数(这些函数完成的事情必须在服务器端完成)。 基本上,所有编码都是在php中完成的。 php具有所有对象,常量,页面中所需的所有信息。但是,所有操作都需要由用户通过单击按钮启动。

但问题出现了:如何有效地将这些PHP功能与我的按钮混合?现在我正在使用ajax,javascript和jquery,但我这样做的方式感觉有争议,这就是我的意思:

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

其中一个ajax操作是$.post,指向以下页面:

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

在上面,进行了一些php计算以确定战斗是否结束,如果是,它回应一些Javascript并将其返回(通过AJAX请求)到主页面,这将导致按钮停止在未来奔跑。

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

3 个答案:

答案 0 :(得分: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
       }
    }
})

答案 1 :(得分: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仅用于同步游戏或获取客户端无法获取的资源。

答案 2 :(得分: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需要大量输入。