我正在设计一个模板创建工具,它使用一个jQuery Ajax请求将参数发布到PHP文件。 PHP实际生成模板的HTML。
// Send for processing. Expect JS back to execute.
function generate() {
$.ajax({
type: "POST",
url: "generate.php",
data: $('#genform :input').serialize(),
dataType: "script",
beforeSend: function() {
$("#loading").html("<img src='images/loadbar.gif' />");
$("#loading")
.dialog({
height: 80,
width: 256,
autoOpen: true,
modal: true
});
},
success: function(data) {
$("#loading").dialog('close');
}
});
}
我的麻烦是我有ajax dataType:设置为“script”。使用它,PHP文件为任何错误生成一些jQuery对话框。但是,在生成HTML之后,我无法将其传回去。
所以我可能有100行生成的HTML和javascript,我想与之合作。 在PHP文件中,我尝试过:
echo('$("#result").html("'.$html.'");');
如果$ html中没有换行符,这确实有用。只要有任何换行符,Chrome调试器就会报告“gen.html:1 Uncaught SyntaxError:Unexpected token ILLEGAL”。很明显,它正在尝试评估返回的响应头,但是在任何换行符时停止。
所以,要清楚,当我传回$ html时,如果内容是这样的话:
$html = "<div>hi there</div>";
它工作正常(我的所有错误消息对话框都是一行)。但如果是的话:
$html = "<div>
hi there
</div>";
它爆炸了。
我真的不确定如何解决这个问题,或者是否有更好的方法可以解决这个问题。保留格式以便人们可以复制HTML模板对我很重要。
如果我无法解决这个问题,我可能会在PHP页面上分解并显示模板文件,但我真的希望将所有内容都放在HTML页面的范围内。
答案 0 :(得分:2)
另一种简单的方法(类似于xml解决方案)是将JSON响应编码为对象。这自然得到了jQuery的支持,它实际上也为你解码了JSON。它涉及使用:
dataType: "script"
替换为datatype: "json"
json_encode($html);
这是改变后的成功函数
success: function(data) {
$("#loading").dialog('close');
$("#result").html(data.result_html);
}
这是改变的PHP函数:
echo json_encode(array('result_html' => $html));
我不想直接输出HTML,因此您可以在将来向JSON输出添加额外的数据,但您也可以使用PHP $("#result").html(data);
echo json_encode($html);
答案 1 :(得分:0)
您可以将dataType更改为“text”或“xml”,以便不评估响应。
dataType: ($.browser.msie) ? "text" : "xml",
答案 2 :(得分:0)
你必须逃避破坏javascript代码的所有内容:
$ html = str_replace(array('\\',“\ r”,“\ n”,'“'),array('\\\\','\ r','\ n',' \“'),$ html);
回波( '$( “#结果”)的HTML( “' $ HTML。 '”);');
答案 3 :(得分:0)
尝试创建输出处理函数:
function ob_handler($string, $flags) {
return nl2br($string);
}
或者:
function ob_handler($string, $flags) {
$string = str_replace(array("\r", "\n"), array('', ''), $string);
return $string;
}
然后使用它代码:
ob_start('ob_handler');
/// all your code here
ob_end_flush();