如何使用window.document.write将HTML写入新选项卡进行渲染?

时间:2017-12-20 20:18:41

标签: javascript html ajax

我有一个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等进行渲染?

1 个答案:

答案 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标签,那将会有所帮助!