在单个代码中混合PHP,Javascript,Ajax

时间:2013-05-19 15:08:51

标签: php javascript jquery ajax

在同一段代码中编写由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函数。

3 个答案:

答案 0 :(得分: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"添加到应用程序中的所有脚本,只需将其插入一个位置即可?

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

答案 1 :(得分: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分离了。不过我闻到你可以做游戏客户端的所有逻辑,只使用服务器进行登录/数据保存。

答案 2 :(得分: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!';
}

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