10 Jahre
Gespräch vereinbaren
Werbung
FeatValue
Das Kundenportal für Agenturen und Freelancer
Integriert sich in das bestehende Projektmagement-System
Kostenlos registrieren
<h1 class="entry-title ">Andere Formen von Ajax</h1> Je nach dem welches Ziel mit dem Einsatz von Ajax-Techniken verfolgt wird kann es sich unter Umst&auml;nden heraus stellen, dass einzelne Bestandteile zu kompliziert sind bzw. das Ziel mit deutlich einfacheren Mitteln erreicht werden kann. Insbesondere das Auslesen und Verarbeiten der XML-Daten stellt oftmals einen nicht unerheblichen Aufwand im Vergleich zum relativ geringen Nutzen dar. <div id="content_ad"> </div> <h2> <a name="ajaxohnexml:json">Ajax ohne XML: JSON</a> </h2> Eine Alternative zur Verwendung von XML-Daten stellt hier das sogenannte JSON dar. Gesprochen wird es wie der amerikanische Name Jason und ist im Prinzip nichts anderes als die einfache Objektschreibweise. In Verbindung mit <a href="/ratgeber/ajax">Ajax</a> geschieht hier folgendes:<br> <br>Um das Auslesen und Verarbeiten der per Ajax abgerufenen Daten zu erleichtern wird vom Server keine XML-Datei sondern direkt JavaScript-Code ausgegeben. Damit dieser m&ouml;glichst universell verarbeitet werden kann, erfolgt die Ausgabe der Daten hierbei in Form von einfachen Objekten. Man fragt den Code normal per Ajax ab und f&uuml;hrt diesen anschlie&szlig;end mittels der <code>eval</code>-Funktion aus. Diese funktioniert im Prinzip wie das <code>&lt;script&gt;</code> in HTML: Der als String &uuml;bergebene Wert wird als JavaScript-Code erkannt und ausgef&uuml;hrt. Das im Code enthaltene Objekt wird damit erstellt und kann anschlie&szlig;end verwendet werden. <br>Der vom Server gelieferte Code k&ouml;nnte z.B. so aussehen:</p> <p class="BSP">{Name:'Max&nbsp;Mustermann',&nbsp;<br>&nbsp;Straße:&nbsp;'Musterstraße&nbsp;14',&nbsp;<br>&nbsp;PLZ:'12345',&nbsp;<br>&nbsp;Ort:'Musterhausen'}</p> ... der vom Client dann so verarbeitet wird:</p> <p class="BSP">o.open('GET','http://www.meineseite.de/seite.php');<br>o.onreadystatechange&nbsp;=&nbsp;function&nbsp;()<br>{<br>&nbsp;if(o.readyState&nbsp;==&nbsp;4&nbsp;&amp;&amp;&nbsp;o.status&nbsp;!=&nbsp;200)<br>&nbsp;{<br>&nbsp;&nbsp;kunde&nbsp;=&nbsp;eval(o.responseText);<br>&nbsp;&nbsp;document.writeln(kunde.Name+'&lt;br&gt;');<br>&nbsp;&nbsp;document.writeln(kunde.Straße+'&lt;br&gt;');<br>&nbsp;&nbsp;document.writeln(kunde.PLZ+'&nbsp;');<br>&nbsp;&nbsp;document.writeln(kunde.Ort+'&lt;br&gt;');<br>&nbsp;}<br>};<br>o.send(null);</p> <a href="/ratgeber/javascript/json">Mehr zum Thema JSON in JavaScript</a> <h2> <a name="ajaxohnexmlhttprequest">Ajax ohne XMLHttpRequest</a> </h2> Neben dem Problem wie man die XML-Daten sinnvoll verarbeiten kann, taucht in manchen F&auml;llen das Problem auf, dass das zur &Uuml;bertragung verwendete <code>XMLHttpRequest</code>-Objekt nicht zur Verf&uuml;gung steht - etwa weil der Browser dies nicht unterst&uuml;tzt. Auch hierf&uuml;r gibt es in den meisten F&auml;llen eine L&ouml;sung.</p> <h3> <a name="datenperiframeladen">Daten per IFrame laden</a> </h3> Die einfachste und zugleich gebr&auml;uchlichste L&ouml;sung, Daten ohne die Verwendung des <code>XMLHttpRequest</code>-Objekts zu laden, ist die Verwendung von IFrames. Hierbei wir in die Seite hinein ein 1x1 Pixel gro&szlig;er <code>&lt;iframe ...&gt;</code> erzeugt, der anschlie&szlig;end angesprochen und in den eine Datei geladen werden kann. Werden neue Daten ben&ouml;tigt wird dem IFrame einfach eine neue <acronym title="Uniform Resouce Locator">URL</acronym> zugewiesen und so der Inhalt des IFrames neu geladen. Statt XML-Daten wird in diesem Fall vom Server eine normale HTML-Datei erzeugt die selbst wiederum ein <a href="/ratgeber/javascript">JavaScript</a> mit entsprechenden Anweisungen beinhaltet. Um etwa wie in den vorangegangenen Beispielen jeweils eine Adresse vom Server abzufragen und anzuzeigen k&ouml;nnte z.B. folgender Code dienen:</p> <p class="BSP">document.writeln('&lt;iframe&nbsp;src="about:blank"&nbsp;name="ajaxframe"&nbsp;'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'height="1"&nbsp;width="1"&nbsp;&gt;&lt;/iframe&gt;');<br>parent.ajaxframe.location.href&nbsp;=&nbsp;'adressen.php';</p> ... adressen.php k&ouml;nnte dann in etwa so aussehen:</p> <p class="BSP">&lt;html&gt;<br>&lt;head&gt;&lt;/head&gt;<br>&lt;body&nbsp;&gt;<br>&lt;script&nbsp;language="JavaScript"&gt;<br>&lt;!--<br>&nbsp;alert('Max&nbsp;Mustermannn'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Musterstraße&nbsp;14n'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'12345&nbsp;Mustehausen')<br>//--&gt;<br>&lt;/script&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;</p> <h3> <a name="datenperscriptladen">Daten per Script laden</a> </h3> &Auml;hnlich wie beim Laden eines IFrames kann auch ein einfaches Script-Element dazu verwendet werden, Daten dynamisch bei Bedarf nachzuladen. Hierzu erstellt man einfach ein neues <code>script</code>-Element und h&auml;ngt es an den <code>&lt;head&gt;</code> an. Der Browser l&auml;dt das Script nach und f&uuml;hrt es aus. Die so gewonnenen Daten k&ouml;nnen anschlie&szlig;end entsprechend verarbeitet und angezeigt werden. Einfaches Beispiel f&uuml;r die HTML-Datei:</p> <p class="BSP">var&nbsp;Head&nbsp;=&nbsp;document.getElementsByTagName("head")[0];<br>var&nbsp;Script&nbsp;=&nbsp;document.createElement('script');<br>Script.setAttribute('type',&nbsp;'text/javascript');<br>Script.setAttribute('src',&nbsp;daten.php');<br>Head.appendChild(Script);</p> ... in daten.php w&uuml;rde dann z.B. folgendes stehen:</p> <p class="BSP">var&nbsp;Name&nbsp;=&nbsp;'Max&nbsp;Mustermann';<br>var&nbsp;Straße&nbsp;=&nbsp;'Musterstraße&nbsp;14';<br>var&nbsp;plzort&nbsp;=&nbsp;'12345&nbsp;Mustehausen';<br>var&nbsp;fertiggeladen&nbsp;=&nbsp;true;</p> Der Knackpunkt an dieser Variante liegt darin, dass man nicht genau weiß ob/wann die Daten geladen sind. Insbesondere wenn sich das geladene Script nicht selbst ausf&uuml;hrt sondern lediglich Variablen auf einen neuen Wert setzt muss irgendwie in Erfahrung gebracht werden wann und ob das Script geladen wurde. Hierzu bedient man sich mehreren Timeouts und pr&uuml;ft regelm&auml;&szlig;ig ob das Script angekommen ist:</p> <p class="BSP">var&nbsp;fertiggeladen&nbsp;=&nbsp;false;<br>var&nbsp;dl&nbsp;=&nbsp;0;<br> <br>function&nbsp;scriptGeladen(callback)<br>{<br>&nbsp;if(!fertiggeladen)<br>&nbsp;{<br>&nbsp;&nbsp;dl++;<br>&nbsp;&nbsp;if(dl&gt;100){return&nbsp;false;}<br>&nbsp;&nbsp;window.setTimeout('scriptGeladen("'+callback+'"',500);<br>&nbsp;&nbsp;return&nbsp;false;<br>&nbsp;}<br>&nbsp;eval(callback);<br>}<br> <br>function&nbsp;sagan()<br>{<br>&nbsp;alert(Name+'n'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Straße+'n'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plzort);<br>}<br> <br>var&nbsp;Head&nbsp;=&nbsp;document.getElementsByTagName("head")[0];<br>var&nbsp;Script&nbsp;=&nbsp;document.createElement('script');<br>Script.setAttribute('type',&nbsp;'text/javascript');<br>Script.setAttribute('src',&nbsp;daten.php');<br>Head.appendChild(Script);<br>scriptGeladen('sagan()');</p> <h3> <a name="datensendenperimage">Daten senden per Image</a> </h3> Noch deutlich einfacher und zudem selbst mit &auml;lteren Browsern kompatibel geht es, wenn es einzig darum geht, Daten an den Server zu senden, ohne dass dazu das Ergebnis vom Browser interessant ist. Hierzu bedient man sich einfach einer Grafik die geladen und damit vom Server abgerufen wird. Statt einem Bild l&auml;dt man jedoch eine PHP-, <a href="/ratgeber/asp-net">ASP</a> oder andere Datei und um die Daten an den Server zu &uuml;bermitteln werden diese dabei einfach als Parameter mit &uuml;bergeben. Das Script kann die Parameter dann auswerten und leitet einfach zu einer echten Grafik weiter. Das Script dazu k&ouml;nnte z.B. recht einfach so aussehen:</p> <p class="BSP">a&nbsp;=&nbsp;new&nbsp;Image();<br>a.src&nbsp;=&nbsp;'speichere.php?id=123&amp;wert=7252';</p> ... bzw. sofern der Nutzer eine R&uuml;ckmeldung &uuml;ber den Zustand bekommen soll, einfach so:</p> <p class="BSP">&lt;img&nbsp;src="leer.gif"&nbsp;width="20"&nbsp;height="20"&nbsp;name="speichere"&gt;<br>...<br>&lt;script&nbsp;language="JavaScript"&gt;<br>&lt;!--<br>&nbsp;document.speichere.src&nbsp;=&nbsp;'speichere.php?id=123&amp;wert=7252';<br>//--&gt;<br>&lt;/script&gt;</p> ... auf dem Server macht speichere.php dann z.B. folgendes:</p> <p class="BSP">&lt;?php<br> <br>mysql_query('INSERT&nbsp;INTO&nbsp;daten&nbsp;(id,wert)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VALUES("'.addslashes($_GET['id']).'",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"'.addslashes($_GET['wert']).'")');<br>header('Location:&nbsp;gespeichert.jpg');<br>exit;<br> <br>?&gt;</p> F&uuml;r alle nicht PHP-ler: Das Script schreibt die beiden per Parameter id und wert &uuml;bergebenen Daten in die mySQL-Datenbank und leitet den Abruf dann an die Datei gespeichert.jpg weiter. Der Besucher sieht also lediglich das Resultat, n&auml;mlich die Datei gespeichert.jpg die vielleicht einfach nur ein "Ok" oder dergleichen anzeigt.</p>

Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.

Weiterlesen: ⯈ Ajax-Frameworks

Über uns

Stefan Wienströer

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project

Cookie-Einstellungen

Helfen Sie dabei, uns noch besser zu machen. Wir nutzen Cookies und ähnliche Technologien, um die Website auf Ihre Bedürfnisse anzupassen. Zur Datenschutzerklärung

Auswahl speichern