2013-10-29 33 views
0

我需要做一个DOM取代,这样的事情:如何编写代码的JavaScript内

$("#target").html('<?php echo $html?>'); 

其中$html变量可能是一个复杂的标记

$html = '<div> 
    <input type="text" name="test" /> 
    </div>'; 

当然,我需要某种形式的的转义,或者JavaScript引擎在第一个crlf或引用中会出现语法问题。在导轨中有一个简单的功能escape_javascript,使它非常容易。 cakephp中有没有类似的东西?

+0

的[传递一个PHP字符串JavaScript变量(和逃避换行符)](可能重复http://stackoverflow.com/questions/168214/pass-a-php-string-to-a-javascript -variable-and-escape-newlines) – ndm

回答

0

您可以通过使用requestAction

做到这一点

在您的视图文件中加入以下代码

$html = $this->requestAction('/tests/func_name'); 

echo $this->Html->scriptBlock(' 
    $("#target").html('. $this->Js->value($html) .'); 
'); 

并在你的TestsController中。

public function func_name() { 
    $this->layout = 'layout_name'; // The layout you want here for design. 

    $this->render('/Elements/element_name'); // you can directly render the content of element by writing like this. 
} 
+0

不错,但我不能使用'$ this-> Js':未定义的属性视图:: $ Js –

+0

也许你不包括js helper。只需在控制器和应用程序控制器中检查'$ helpers'属性并包含它。 –

+0

它的工作原理!我认为JS和Javascript助手是一回事,但他们不是。 –

1

我想用

$("#target").html('<?php echo $this->element("element_path"); ?>'); 

更有意义。但它取决于你的element_path.ctp文件中的内容。另一方面,把替换的HTML放在这里是有点奇怪的。特别是如果它是一个lott,我会做一个ajax调用来加载HTML并且有一个Controller函数返回元素的内容。

$("#target").html('Loading...').load('/myController/loadHtml/'); 

和myController的

function loadHtml(){ 
    $this->layout = false; 
} 

和功能的应用程序的视图/查看/我的/ load_html.ctp:

<?php echo $this->element("element_path"); ?> 
+0

问题是一样的。它返回一个非转义的html –

+0

@VecchiaSpugna为什么要在使用['jQuery.html()'](http://api.jquery.com/html/)函数时转义HTML?这没有任何意义。如果您希望数据以文本显示,请改用['jQuery.text()'](http://api.jquery.com/text/)。当真的需要手动转义HTML时,请查看['h()'](http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#h )。 – ndm

+0

,因为如果Jquery.html()参数是包含crlf的文本,那么JavaScript将打破 –