2017-12-20 1 views
1

Ich habe ein Javascript-Programm, das ein Formular an eine PHP-Seite übermittelt, die Daten abhängig von den Formulareinträgen sammelt. Ich habe überprüft, dass die Daten korrekt zurückgegeben werden. Im folgenden Stück des Codes, wird der Erfolg Teil des Ajax-Aufruf dargestellt:Wie bekomme ich HTML geschrieben, um mit window.document.write eine neue Registerkarte zu erstellen?

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"); 
     } 

Die Registerkarte wird geöffnet, und die entries[i] Elemente, die Strings sind, werden auf die neue Registerkarte geschrieben. Dies ist, was auf dem Browserfenster angezeigt wird:

<h1>Age 1</h1><h2>Test</h2><br/>Test 

Die Seite Quelle zeigt:

<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); 

es, dass die h1 usw. in die Saiten setzen erscheint in ihnen Ergebnis zurückgegeben werden wird codiert als <h1> usw. Sie erscheinen dann im Quelltext der Seite als '<', aber die gesamten Zeilen, die die entries[i] enthalten, sind in doppelte Anführungszeichen eingeschlossen. Wenn ich unescape(obj) schreibe, ersetze ich "<h1> Hallo Welt </h1 >", bekomme ich das auf der Seite gerendert.

Wie bekomme ich den HTML-Code auf die Seite und lasse ihn mit der h1, h2, etc. gerendert werden?

Antwort

0

Nun, es ging um meinen Ellenbogen, um von meinem Finger zu meinem Daumen zu kommen, ABER, ich habe es zur Arbeit gebracht. In der PHP habe ich geändert, um ein JSON-Array als jedes Element in Elementen, nämlich zu speichern.

$nameAttr = 'h1'; 
    $item = array(); 
    $item[$nameAttr] = "Age $age"; 
    array_push($items,$item);   

ähnlich für h2-Element und gerade Textelement.

In der index.html-Seite, wo es verarbeitet wird, ersetzt ich das newWindow.document.write (obj), mit:

   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); 
        } 
      }); 
       } 

Es gemacht wie ich wollte! Dies scheint übermäßig komplex zu sein, um so eine einfache Sache zu machen, wie man viele Arten von Einträgen auf der Seite haben könnte, wie <tr>, etc. Diese Methode würde 'Schlüssel' für jedes HTML-Element und einen nachfolgenden Handler für diesen Schlüssel erfordern. Wenn jemand eine Ahnung hat, wie man die HTML-Tags in den PHP-Code einfügt, wäre es hilfreich!

Verwandte Themen