我有一些从Zend_Form
生成的HTML数据。
我想将其附加到div#wrapper
元素,但我的尝试引发了错误:Unterminated string literal
。
我该怎么办才能修复它?
注意:好的,好像每个人都认为我忘记将php标记放在我的代码上,但事实并非如此。这是我的“真实”代码
<?php
class Admin_Elements_Dialog {
private $_name;
private $_title;
private $_action;
private $_button = null;
private $_content;
private $_options = array();
public function __construct($options) {
$this->_options = $options;
}
public function setName($name) {
$this->_name = $name;
return $this;
}
public function setTitle($title) {
$this->_title = $title;
return $this;
}
public function setAction($action) {
$this->_action = $action;
return $this;
}
public function setOpener($button) {
if ($button instanceof Admin_Elements_Buttons)
$this->_button = $button;
return $this;
}
public function setContent($content) {
$this->_content = $content;
return $this;
}
public function renderScript() {
$html = array();
$html[] = '$(document).ready(function() {
$("body").append(\'<div id="' . $this->_name . '" title="' . $this->_title . '" class="ui-helper-hidden">' . $this->_content . '</div>\');
var dialog = $("#' . $this->_name . '").dialog(' . Zend_Json::encode($this->_options, false, array('enableJsonExprFinder' => true)) . ');
$("#' . $this->_button->getId() . '").click(function() {
$("#' . $this->_name . '").dialog("open");
return false;
});
});';
$html[] = '';
return join($html, PHP_EOL);
}
}
?>
答案 0 :(得分:1)
您在Javascript中使用PHP并置运算符.
。
Javascript的连接运算符为+
:
$(document).ready(function() {
$("div#wrapper").append('<div id="dialog" title="Add new blog">' + <?php echo $this->form->render() ?> + '</div>');
});
此外,PHP代码插入逐字地插入到您的页面中。如果$this->form->render()
没有生成字面上引用封装的字符串,那么生成的Javascript将无效。
你的意思是:
$(document).ready(function() {
$("div#wrapper").append('<div id="dialog" title="Add new blog"><?php echo $this->form->render() ?></div>');
});
但肯定有更好的方法。这样,你就必须注意可逃避的字符和换行符。
另外,我无法抗拒:这是“提前谢谢”;没有尾随“d”。
答案 1 :(得分:1)
您正在混合使用PHP和JavaScript代码。您始终需要记住,PHP在服务器上运行,而Javascript在客户端上运行。
你想要的可能就是:
$(document).ready(function() {
$("div#wrapper").append('<div id="dialog" title="Add new blog"><?php echo $this->form->render(); ?></div>');
});
显然,您需要确保该字符串中的所有换行符和单引号都已转义(\n
和\'
)
答案 2 :(得分:1)
好的,我通过使用函数preg_replace
删除所有新行和分页符来解决我的问题preg_replace('/[\r\n]+/', null, $this->_content)
答案 3 :(得分:0)
您混合使用javascript和PHP代码。
我认为如果你的js是由PHP脚本生成的,那可能会更好:
<?php /** I'm in PHP */ ?>
$(document).ready(function() {
$("div#wrapper").append('<div id="dialog" title="Add new blog"><?php $this->form->render()?></div>');
});
答案 4 :(得分:0)
在客户端运行Javascript之前,在服务器端解析PHP。因此,PHP将直接注入Javascript字符串。然后JQuery会将它附加到您指定的位置。
$(document).ready(function() {
$("div#wrapper").append('<div id="dialog" title="Add new blog"><?php echo $this->form->render() ?></div>');
});
答案 5 :(得分:0)
基本上,当您的PHP代码在服务器上呈现时,它会解析<?php ?>
之间的所有内容。因此,当您的代码呈现时,它会变成类似
$(document).ready(function() {
$("div#wrapper").append('<div id="dialog" title="Add new blog">' + <form></form> + '</div>');
});
请注意,生成的JS代码的<form></form>
元素未包含在引号中。这会导致“未终止的字符串文字”错误。
要解决这个问题,你只需要用引号括起来,比如
$("div#wrapper").append(
'<div id="dialog" title="Add new blog">' + '<?php $this->form->render(); ?>' + '</div>'
)
或者,您可以将PHP放入JS字符串中:
$("div#wrapper").append(
'<div id="dialog" title="Add new blog"><?php $this->form->render(); ?></div>'
)