在同一段代码中编写由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函数。
答案 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!';
}
这样就不需要不必要的服务器调用了。