我有一个javascript程序,它将表单提交到PHP页面,该页面根据表单条目收集数据。我已经验证数据是否正确返回。在下面的代码中,显示了ajax调用的成功部分:
success: function(msg){
var newWindow = window.open("_blank");
var result = $.parseJSON(msg);
var array =
newWindow.document.open();
newWindow.document.write("<!DOCTYPE html><html><head></head><body>");
for( var i=0; i<result.entries.length; i++ ) {
var obj = result.entries[i];
newWindow.document.write(unescape(obj));
}
newWindow.document.write("</body></html>");
newWindow.document.close();
newWindow.focus();
alert( "Printout complete" );
}
打开选项卡,将entries[i]
元素(即字符串)写入新选项卡。这是浏览器窗口中显示的内容:
<h1>Age 1</h1><h2>Test</h2><br/>Test
页面来源显示:
<html><head></head><body>"<h1>Age</h1><h2>Test</h2><br/>Test"</body></html>
The PHP page which filled the result obj contained:
...
if( $age != $last_age ) {
$last_age = $age;
array_push($items,"<h1>Age $age</h1>");
}
if( $age == $last_age && $event != $last_event ) {
$last_event = $event;
array_push($items,"<h2>$event</h2>");
}
array_push($items,"<br/>$data");
}
$result["entries"] = $items;
header("Content-type: application/json");
header("Cache-Control: no-cache, must-revalidate");
echo json_encode($result);
似乎将h1等放入要返回的字符串中导致它们被编码为&lt; h1&gt;。然后,它们会在页面的源代码中显示为&#39;&lt;&#;;但是包含entries[i]
的整行包含在双引号中。如果我在哪里写unescape(obj)
,我会替换&#34;&lt; h1&gt; Hello World&lt; / h1&gt;&#34;,我会在页面上进行渲染。
如何将HTML添加到页面并使用h1,h2等进行渲染?
答案 0 :(得分:0)
嗯,我的手肘绕着我的手指伸到我的拇指上,但是,我开始工作了。在PHP中,我更改为将JSON数组存储为项目中的每个元素,即
$nameAttr = 'h1';
$item = array();
$item[$nameAttr] = "Age $age";
array_push($items,$item);
类似于h2元素和直文元素。
在处理它的index.html页面中,我用以下内容替换了newWindow.document.write(obj):
var objJSON = result.entries[i];
$.each(objJSON, function(key, value) {
if( key == 'h1' ) {
newWindow.document.write("<center><h1>"+value+"</h1></center>");
} else if (key == 'h2' ) {
newWindow.document.write("<center><h2>"+value+"</h2></center><br/>");
} else {
newWindow.document.write(value);
}
});
}
按照我的意愿呈现!这样一个简单的事情似乎非常复杂,因为在页面上可能有许多类型的条目,例如&lt; tr&gt;等。这种方法需要&#39;键&#39;为每个html元素和该键的后续处理程序。如果有人知道如何在PHP代码中包含html标签,那将会有所帮助!