0

在同一段代码中编写由 php、javascript 和 ajax 组成的代码是不好的做法吗?例如:

<?php
 $randNum = rand(1,10)
  if ($randNum <= 5) {
    echo "Enemy got the jump on you! <script> enemyTurn() </script>";
  }else {
    echo "You got the jump! <script> playerTurn() </script>";
  }
?>

enemyTurn(),playerTurn()是包含 jQuery 和 AJAX 的 javascript 函数。

4

3 回答 3

1

这归结为设计哲学的问题。如果我要编写这样的代码,我可能会有一个类来添加消息,以及一个脚本调用。它可能看起来像这样:

class BrowserAction {

    public function __construct($message, $javascript) {
        $this->message = $message;
        $this->javascript = $javascript;
    }

    protected $message;
    protected $javascript;

    public function setMessage($message) {
        $this->message = $message;
    }

    public function printMessage() {
        return $this->message();
    }

    public function setJavascript($javascript) {
        $this->javascript = $javascript;
    }

    public function printJavascript() {
        return '<script type="text/javascript">' . 
            $this->javascript() .
            '</script>';
    }

    public function toString() {
        return $this->printMessage() . $this->printJavascript();
    }

    public function echo() {
        echo $this->toString();
    }
}

并像这样使用它:

<?php
 $randNum = rand(1,10)
  if ($randNum <= 5) {
    $msg = new BrowserAction("Enemy got the jump on you!", "enemyTurn()");
  }else {
    $msg = new BrowserAction("You got the jump!", "playerTurn()");
  }
  $msg->echo();
?>

这将使您在以后添加或扩展应用程序时更加灵活。看看我是如何type="text/javascript"通过将其插入到一个位置来简单地将其添加到应用程序中的所有脚本的吗?

对于这个特定的例子,这是可以接受的。事实上,你会怎么做才能达到预期的效果?

于 2013-05-19T15:10:34.083 回答
1

是的,因为在浴缸里洗盘子是一种不好的做法:你仍然可以这样做,但是当你需要淋浴时会很痛苦。

关注点应尽可能保持分离,例如:

PHP

<?php if ($randNum <= 5): ?>

<div data-function="enemyTurn">Enemy got the jump on you!<div>

<?php else: ?>

<div data-function="playerTurn">You got the jump!<div>

<?php endif; ?>

JS

$(function(){

  var yourFunctions = {

    enemyTurn : function(){ // some stuff },
    playerTurn : function(){ // some stuff }

  };

  $('[data-function]').each(function(){

    yourFunctions[$(this).data('function')].call(this);

  })

});

这样你的 js 代码就与 HTML 分离了。不过我觉得你可以做一个游戏客户端的所有逻辑,使用服务器只是为了登录/数据保存目的。

于 2013-05-19T15:29:45.783 回答
0

您可以通过以下方式在 Javascript 中实现相同的预期效果:

if((Math.round(Math.random() * 10 + 1) % 2) === 0)
{
    enemyTurn();
    document.getElementById('status').innerHTML = 'Enemy got the jump on you!';
}
else
{
    playerTurn();
    document.getElementById('status').innerHTML = 'You got the jump!';
}

这样就不需要不需要的服务器调用。

于 2013-05-19T15:17:39.517 回答