2013-10-29 37 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將打破 –