SEO Welten
Buchempfehlungen
|
Ajax: Mehrere Requests nacheinander ausführenAjax-Requests entsprechend einer festgelegten Reihenfolge ausführenÜbersicht / Seite:
Domainübergreifende Kommunikation mit AjaxAuf der vorausgehenden Seite wurde eine Möglichkeit vorgestellt, um mit
JavaScript und Ajax eine XML-Datei einzulesen, den Inhalt auszuwerten und auszugeben. Dabei wurde jedoch
auf eine Datei zugegriffen, die auf dem eigenen Server lag und unter derselben Domain wie die
aufrufende, den Ajax-Code enthaltende Datei erreichbar war. Ein wenig komplizierter wird die
Angelegenheit, wenn auf eine Datei zugegriffen werden soll, die nicht auf dem eigenen, sondern auf einem
entfernten Server liegt. Serverseitige Umsetzung: Requests senden und Response auswertenFür die Umsetzung sind mindestens zwei Dateien erforderlich, wobei es
sich bei der einen Datei um eine einfache HTML-Seite mit einem kleinen Ajax-Script handelt und bei der
anderen Datei um ein simples PHP-Script, welches in die Rolle eines Proxys schlüpft. Damit das Beispiel
nicht zu einfach wird, wurde die Aufgabenstellung im Exempel noch ein wenig erweitert. So sollen nicht
nur nicht nur mehrere Anfragen an unterschiedliche Domains gesendet werden, sondern die Antworten
(Response) zusätzlich noch unterschiedlich ausgewertet werden. testseite.php?url=www.example.com/unterseite.html Diese Art der Übergabe erleichtert die eigentliche Umsetzung jedoch nicht
unbedingt, wenn zwischen den einzelnen Domains eine Auswahl oder Unterscheidung zu treffen ist.
Weiterhin müssten zusätzliche Sicherheitsmaßnahmen getroffen werden, damit durch einfachen Austausch der
Parameterwerte keine unerwünschten Seiten durch Unbefugte geladen werden können. Im Beispiel wurden aus
diesem Grund auf die Übergabe von URLs verzichtet. Stattdessen erhalten alle gewünschten URLs eine
eindeutige ID, womit noch weitere Vorteile verbunden sind. Diese weiteren Vorteile ergeben sich aus den
Beispiel-Codes und sind mehr oder weniger selbsterklärend. <?php error_reporting(E_ALL); ini_set("display_errors", true); $feedurls = array ( 1 => "www.example.com/startseite.html", 2 => "www.example.com/rubrikseite.html", 3 => "www.example.com/unterseite.html", 4 => "www.example.net/startseite.php", 5 => "www.example.net/unterseite.php/" ); // Auswertung, mit welcher Funktion die jeweilige zur URL gehörende Seite geholt und ausgewertet werden soll if (isset($_GET["urlid"]) and !empty($_GET["urlid"])) { $urlid = preg_replace("/[^0-9]/", "", $_GET["urlid"]); if ($urlid == 2 or $urlid == 3 or $urlid == 5) { echo sucheH1P1("http://".$feedurls[$urlid]); } elseif ($urlid == 1 or $urlid == 4) { echo sucheMetas("http://".$feedurls[$urlid]); } else {echo "Ein Fehler trat auf!"; } } // Die als URL angegebene Datei holen und in einem String lesen function oeffneSeite($suche) { $option = array("http" => array("header" => "User-Agent: Mozilla/5.0 (compatible; Ajax/PHP)\r\n")); $agent = stream_context_create($option); if (($daten = file_get_contents($suche, false, $agent)) != false) { return $daten; } else { echo "File konnte nicht geladen werden!\n"; } } // Inhalt von H1 und dem ersten P-Tag auslesen function sucheH1P1($suche) { $daten = oeffneSeite($suche); $finde = ""; if (preg_match("/<h1.*?>(?P<titel>.+?)<\/h1>/is", $daten, $findeh)){ $finde .= "<b>".htmlspecialchars($findeh["titel"], ENT_QUOTES)."</b><br>\n"; } else { echo "Es wurde kein H1-Tag gefunden!<br>\n"; } if (preg_match("/<p.*?>(?P<absatz>.+?)<\/p>/is", $daten, $findep)){ $finde .= htmlspecialchars($findep["absatz"], ENT_QUOTES)."\n"; } else { echo "Es wurde kein P-Tag gefunden!<br>\n"; } return $finde; } // Nur den Titel der Seite auslesen function sucheMetas($suche) { $daten = oeffneSeite($suche); $finde = ""; if (preg_match("/<title>(?P<titel>.+?)<\/title>/is", $daten, $findeh)){ $finde .= "<b>".htmlspecialchars($findeh["titel"], ENT_QUOTES)."</b><br>\n"; } else { echo "Es wurde kein Titel gefunden!<br>\n"; } return $finde; } ?> Das Speichern von IDs und Web-Adressen in Arrays empfiehlt sich für kleine mit mittlere Seiten mit einer überschaubaren Anzahl an externen Verbindungen. Alternativ könnten bei größeren Projekten die URLs unter einer Datenbank gespeichert und gegebenenfalls mit einigen Flags versehen werden. Clientseitige Umsetzung: Anfragen sendenDie clientseitige Umsetzung mit HTML und Ajax gestaltet sich einfacher,
auch wenn einige Punkte zu beachten sind. Grundlegendes zum Prinzip wurde bereits auf den vorausgehenden
Seiten beschrieben und soll an dieser Stelle nicht wiederholt werden. <!DOCTYPE html> <html> <head> <title>Ein Demo-Script mit Ajax</title> <style type="text/css"> h1 {text-align:center} div.bereich {width:800px; margin:auto} div.ausgabe {float:left; border:1px solid #7f4925; width:352px; margin:10px} </style> </head> <body> <h1>Ein Demo-Script mit Ajax</h1> <!-- Hier so viele Div-Bereiche im Dokument anlegen und mit einer ID versehen, wie auszuwertende Seiten geladen werden sollen. --> <div class="bereich"> <div id="ausg1" class="ausgabe">Eins:<br><br></div> <div id="ausg2" class="ausgabe">Zwei:<br><br></div> <div id="ausg3" class="ausgabe">Drei:<br><br></div> <div id="ausg4" class="ausgabe">Vier:<br><br></div> <div id="ausg5" class="ausgabe">Fünf:<br><br></div> </div> <!-- Script-Bereich im Head oder Footer unterbringen oder auslagern --> <script type="text/javascript"> "use strict"; var i = 1; function sendeRequest() { var testObj = null; testObj = new XMLHttpRequest(); testObj.open("GET", "testseite.php?urlid="+i); testObj.onreadystatechange = ladeSeite; testObj.send(null); function ladeSeite() { var fa = false; var anzahl = 5; // Anzahl der zu ladenden Seiten bzw. Anzahl der URIs angeben if (testObj.readyState == 4) { document.getElementById("ausg"+i).innerHTML += testObj.responseText; i++; fa = true; if (i > anzahl) fa = false; } if (fa != false) sendeRequest(); } } window.onload = function() { sendeRequest(); } </script> </body> </html> Mehr zum Thema Einbinden und Einlesen von Dateien mit HTML, PHP und JavaScript auf den folgenden Seiten. |
Navigation
Finden und - Optimierung -
Webcoding
Übersicht Web Services Tutorials &
und vieles mehr...
Weitere Themen
Übersicht |