2010-09-15 34 views
3

处理将PHP混合到Javascript中的最佳方式是什么?不应该这样做吗?是否应该以某种方式完成?我工作的一个项目,我发现下面的JavaScript函数:在Javascript函数中使用PHP

function getStuff() { 
       <?php 
       $stuff = "0:Select"; 
       foreach ($this->stuff as $k => $v){ 
        $stuff = $stuff . ";" . $v['stuff_id'] . ":" . $v['stuff_name']; 
       } 
       ?> 

       return "<?= $stuff ?>"; 
      } 

假设我需要的是,PHP是提供的是得到它的理想方式的数据?这看起来不像我,但写这个的人是我的老板,所以我想在尝试改变它之前先问。

仅供参考,该JS用于视图脚本中,并且从使用该脚本的控制器传入$this->stuff的数据。

回答

3

一个很好的方法是将数据准备到JSON,然后在页面上使其成为一个变量。您可以拥有复杂的结构(关联数组充满数组n -deep),并将其表示为javascript中的对象字面值。

一般来说,你有这样的反感来跳入和跳出PHP标签是正确的。这是丑陋的,很难读取/维护。

+0

所以,如果我json编码数据并将其粘贴在一个变量,我怎么把它放到我的javascript?例如,我的PHP脚本有一个收集数据的函数,json对它进行编码并将其作为'$ foo'返回给视图。在视图中,我需要以$ this-> foo的形式访问它,但是如何将它用于我的javascript? – Lothar 2010-09-15 05:48:08

1

这是非常可怕的,更好的方式来做到这一点是请求数据通过一个Ajax请求,以适当的格式(例如JSON)

为了扩展它为什么“可怕”。很显然,这个功能是以快速肮脏的方式构建的,以完成工作,不断调试和维护功能受到这种方法的阻碍。分离服务器端数据和客户端处理的交付有助于使事情变得简单和易于追踪。

1

有很多方法将ur js与PHP混合在一起。你总是记住的一件事是

在执行JS之前,你的PHP首先在服务器上执行。

看起来你正试图动态地添加一些东西到你的选择框。如果是这种情况,你可以做这样的事情

<?php 
function createSelectbox($selItems) { 
    $selTxt = "<select>"; 

    foreach ($selItems as $id => $value) 
     $selTxt .= "<option id='" .$id. "'>". $value. "</option>"; 

    $selTxt .="</select>"; 

    return $selTxt; 
} 


?> 
<html> 
    <head> </head> 
<body> 
<?php 
$selItems = Array(1 => "One", 2 => "Two", 3=> "Three"); 
echo createSelectbox($selItems); 
?> 
</body> 
</html> 
+0

选择框是动态jQuery生成的网格的一部分,所以它需要在JavaScript中完成。 – Lothar 2010-09-15 07:31:42