<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>RE-Design - Enrico Reinsdorf &#187; ajax</title>
	<atom:link href="http://www.re-design.de/tag/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.re-design.de</link>
	<description>Trainer für Konzeption und Umsetzung von medialen Internet-Projekten</description>
	<lastBuildDate>Fri, 28 Oct 2011 19:26:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Einzelcoaching &#8211; PHP-XML Schulung</title>
		<link>http://www.re-design.de/2009/03/04/einzelcoaching-php-xml-schulung/</link>
		<comments>http://www.re-design.de/2009/03/04/einzelcoaching-php-xml-schulung/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 12:57:00 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Schulungen]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[einzelcoaching]]></category>
		<category><![CDATA[pc-college]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[seminar]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.re-design.de/2009/03/04/einzelcoaching-php-xml-schulung/</guid>
		<description><![CDATA[Einzelcoachings die über 3 Tage gehen sind selten, aber nur so haben die vermittelten Themen eine Chance langfristig im Gedächtnis der Teilnehmer hängen zu bleiben. Das besondere bei diesem Training war, das ich diesen Teilnehmer ungefähr ein Jahr zu vor schon in einer AJAX-Schulung hatte. Es ist schön wiederkehrende Teilnehmer in den Schulungen zu sehen, [...]]]></description>
			<content:encoded><![CDATA[<p>Einzelcoachings die über 3 Tage gehen sind selten, aber nur so haben die vermittelten Themen eine Chance langfristig im Gedächtnis der Teilnehmer hängen zu bleiben.</p>
<p>Das besondere bei diesem Training war, das ich diesen Teilnehmer ungefähr ein Jahr zu vor schon in einer AJAX-Schulung hatte. Es ist schön wiederkehrende Teilnehmer in den Schulungen zu sehen, denn nur so kann ich ein Feedback der gelaufenen Seminare einfordern und sehen ob und was ich verbessern kann. Die sonst üblichen Feedbackbögen am Ende einer Schulung vermitteln ja leider nicht die Langzeitwirkung.</p>
<p>Da der Teilnehmer bei der Messe Düsseldorf für die Pflege der Websites zuständig ist, erzählte er mir dass im Laufe der Zeit viel wenn nicht sogar alle Website eine AJAX-Unterstützung, also Web 2.0, bekommen sollen. Das begrüße ich natürlich hiermit.</p>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2008/12/13/ajax-php-schulung-in-stuttgart/" title="AJAX &ndash; PHP Schulung in Stuttgart">AJAX &ndash; PHP Schulung in Stuttgart</a></li><li><a href="http://www.re-design.de/2011/02/12/javascript-grundlagen-3/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/01/20/php-grundlagen/" title="PHP &ndash; Grundlagen">PHP &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2009/06/20/php-einzelcoaching/" title="PHP &#8211; Einzelcoaching">PHP &#8211; Einzelcoaching</a></li><li><a href="http://www.re-design.de/2011/02/26/php-nachschulung/" title="PHP &ndash; Nachschulung">PHP &ndash; Nachschulung</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2009/03/04/einzelcoaching-php-xml-schulung/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tag 21 – Erweiterung durch AJAX</title>
		<link>http://www.re-design.de/2008/12/21/tag-21-erweiterung-durch-ajax/</link>
		<comments>http://www.re-design.de/2008/12/21/tag-21-erweiterung-durch-ajax/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 22:00:06 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Adventskalender 2008]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[adventskalender]]></category>
		<category><![CDATA[ajax]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=282</guid>
		<description><![CDATA[Um den Bedienungskomfort der Seite zu verbessern, habe ich mir gedacht das die Administration am besten immer innerhalb eines Popups. Also wenn man z.B. eine neue Seite hinzufügen möchte, sollte nicht eine neue Browser-Seite geladen werden, wie es zur Zeit der Fall ist, sondern besser wäre es wenn über die Thickbox-Erweiterung das Formular innerhalb einer [...]]]></description>
			<content:encoded><![CDATA[<p>Um den Bedienungskomfort der Seite zu verbessern, habe ich mir gedacht das die Administration am besten immer innerhalb eines Popups.</p>
<p>Also wenn man z.B. eine neue Seite hinzufügen möchte, sollte nicht eine neue Browser-Seite geladen werden, wie es zur Zeit der Fall ist, sondern besser wäre es wenn über die <a href="http://jquery.com/demo/thickbox/">Thickbox</a>-Erweiterung das Formular innerhalb einer darübergelegten Ebene angezeigt wird. Eigentlich könnte jede Modifikation am System damit erweitert werden. So auch eine Zwischenabfrage vor dem Löschen eines Menüpunktes, einer Box oder gar einer gesamten Seite – auch könnten verlinkte Bilder in dieser neuen Ebene angezeigt werden.</p>
<p>So schön dies klinkt, einen kleinen Nachteil hätte diese Erweiterung allerdings doch. Wenn JavaScript deaktiviert ist, könnte es zu Problemen kommen, da ja <a href="http://de.wikipedia.org/wiki/Ajax_(Programmierung)">AJAX </a>bekanntlich auf JavaScript aufbaut. Aus diesem Grund empfehle ich bewusst zur Zeit solche Erweiterungen nur im kontrollierten Rahmen anzuwenden. In meinem Fall wäre das der Administrationsbereich. Hier sollte JavaScript schon aus dem Grund aktiviert sein, um den <a href="http://www.re-design.de/workbook/?p=254">Online-Editor</a> zu benutzen. Im Frontend-Bereich wo jeder Besucher die Links benutzen möchte, ist es vielleicht zu viel verlangt.</p>
<p>Auch habe ich zur Zeit die Thickbox-Erweiterung nicht mit integriert, um die Übersichtlichkeit und damit die Verständlichkeit nicht zu gefärhden.</p>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2008/12/24/tag-24-abschluss/" title="Tag 24 – Abschluss">Tag 24 – Abschluss</a></li><li><a href="http://www.re-design.de/2008/12/23/tag-23-mehrbenutzer-und-rechtesystem/" title="Tag 23 – Mehrbenutzer- und Rechtesystem">Tag 23 – Mehrbenutzer- und Rechtesystem</a></li><li><a href="http://www.re-design.de/2008/12/22/tag-22-bild-upload-und-rss-feed/" title="Tag 22 – Bild-Upload und RSS-Feed">Tag 22 – Bild-Upload und RSS-Feed</a></li><li><a href="http://www.re-design.de/2008/12/20/276/" title="Tag 20 – CSS-Design">Tag 20 – CSS-Design</a></li><li><a href="http://www.re-design.de/2008/12/19/tag-19-formulare/" title="Tag 19 – Formulare">Tag 19 – Formulare</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2008/12/21/tag-21-erweiterung-durch-ajax/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>AJAX &#8211; PHP Schulung in Stuttgart</title>
		<link>http://www.re-design.de/2008/12/13/ajax-php-schulung-in-stuttgart/</link>
		<comments>http://www.re-design.de/2008/12/13/ajax-php-schulung-in-stuttgart/#comments</comments>
		<pubDate>Sat, 13 Dec 2008 11:34:00 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Schulungen]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[pc-college]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[seminar]]></category>

		<guid isPermaLink="false">http://www.re-design.de/2008/12/13/ajax-php-schulung-in-stuttgart/</guid>
		<description><![CDATA[Vom Montag bis Dienstag habe ich ein Einzelcoaching zum Thema AJAX-PHP-Programmierung gegeben. Der Teilnehmer war im öffentlichen Dienst (Gerichte) tätig und hatte schon viele Vorkenntnisse in PHP. So haben wir uns dann auf die Schulung von JavaScript konzentriert. Thema war dann speziell das DOM-Scripting, sowie die Verarbeitung von XML-Daten und JSON. Um die einzelnen Themen [...]]]></description>
			<content:encoded><![CDATA[<p>Vom Montag bis Dienstag habe ich ein Einzelcoaching zum Thema AJAX-PHP-Programmierung gegeben. Der Teilnehmer war im öffentlichen Dienst (Gerichte) tätig und hatte schon viele Vorkenntnisse in PHP.</p>
<p>So haben wir uns dann auf die Schulung von JavaScript konzentriert. Thema war dann speziell das DOM-Scripting, sowie die Verarbeitung von XML-Daten und JSON.</p>
<p>Um die einzelnen Themen in einem kleinen Projekt besser verständlich zu machen, haben wir <a title="Demo-Anwendung" href="http://weblabor.re-design.de/AJAX-Adressbuch/demo.html">ein kleines Adressbuch</a> programmiert.</p>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2009/03/04/einzelcoaching-php-xml-schulung/" title="Einzelcoaching &ndash; PHP-XML Schulung">Einzelcoaching &ndash; PHP-XML Schulung</a></li><li><a href="http://www.re-design.de/2011/02/12/javascript-grundlagen-3/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/02/24/javascript-grundlagen-4/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/01/20/php-grundlagen/" title="PHP &ndash; Grundlagen">PHP &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/01/15/javascript-grundlagen-2/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2008/12/13/ajax-php-schulung-in-stuttgart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX Adressbuch</title>
		<link>http://www.re-design.de/2008/01/29/ajax-adressbuch/</link>
		<comments>http://www.re-design.de/2008/01/29/ajax-adressbuch/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 12:37:43 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Adventskalender 2007]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[adressbuch]]></category>
		<category><![CDATA[adventskalender]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[design]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=107</guid>
		<description><![CDATA[In meinem Adventskalender habe ich ein kleines Tutorial über die Erstellung eines Adressbuch per AJAX geschrieben. Leider waren aber die Demodateien nicht direkt benutzbar. Ich habe sie nun korrigiert und stelle sie euch hiermit zur Verfügung. AJAX Adressbuch 1.1 Bugfix: Ich habe eine SQL-Datei hinzugefügt, um die Datenbank schneller zu installieren. Jetzt muss nur noch [...]]]></description>
			<content:encoded><![CDATA[<p>In meinem <a href="http://www.re-design.de/workbook/?p=103" title="Alle Türchen sind offen">Adventskalender</a> habe ich ein kleines Tutorial über die Erstellung eines <a href="http://www.re-design.de/workbook/?p=89" title="AJAX Adressbuh Tutorial Teil 1">Adressbuch per AJAX</a> geschrieben. Leider waren aber die Demodateien nicht direkt benutzbar. Ich habe sie nun korrigiert und stelle sie euch hiermit zur Verfügung.</p>
<ul>
<li> <a href="http://www.re-design.de/workbook/wp-content/uploads/2008/01/ajax-adressbuch-11.zip" title="AJAX Adressbuch 1.1">AJAX Adressbuch 1.1</a></li>
</ul>
<p>Bugfix:</p>
<ol>
<li>Ich habe eine SQL-Datei hinzugefügt, um  die Datenbank schneller zu installieren. Jetzt muss nur noch in der include-Datei der Zugriff auf die Datenbank geregelt werden.</li>
<li>Der init()-Methode des Adressbuches wird jetzt der Form-Container übergeben, so dass das Adressbuch flexibler auf das DOM reagieren kann.</li>
<li>Die Literal-Namen wurden in eine einheitliche Schreibweise (RED_AdrBook, RED_AJAX) umbenannt.</li>
<li>Eine update-Funktion für bestehende Datensätze wurde hinzugefügt.</li>
<li>Eine Lösch-Funktion wurde hinzugefügt. Deswegen wurde ein delete.php-Script, welches einen Datensatz löscht, angelget.</li>
<li>Die Anzahl der Datensätze und der aktuelle Datensatz wird nun im Interface angezeigt.</li>
</ol>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2007/12/24/ajax-adressbuch-tutorial-teil-4/" title="AJAX Adressbuch &#8211; Tutorial Teil 4">AJAX Adressbuch &#8211; Tutorial Teil 4</a></li><li><a href="http://www.re-design.de/2008/12/21/tag-21-erweiterung-durch-ajax/" title="Tag 21 – Erweiterung durch AJAX">Tag 21 – Erweiterung durch AJAX</a></li><li><a href="http://www.re-design.de/2007/12/24/alle-tuerchen-von-2007-sind-offen/" title="Alle T&#252;rchen von 2007 sind offen">Alle T&#252;rchen von 2007 sind offen</a></li><li><a href="http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/" title="AJAX Abressbuch &#8211; Tutorial Teil 3">AJAX Abressbuch &#8211; Tutorial Teil 3</a></li><li><a href="http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/" title="AJAX Adressbuch &#8211; Tutorial Teil 2">AJAX Adressbuch &#8211; Tutorial Teil 2</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2008/01/29/ajax-adressbuch/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>AJAX Adressbuch &#8211; Tutorial Teil 4</title>
		<link>http://www.re-design.de/2007/12/24/ajax-adressbuch-tutorial-teil-4/</link>
		<comments>http://www.re-design.de/2007/12/24/ajax-adressbuch-tutorial-teil-4/#comments</comments>
		<pubDate>Mon, 24 Dec 2007 00:00:28 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Adventskalender 2007]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[adressbuch]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=101</guid>
		<description><![CDATA[Nun ist es soweit, heute ist Weihnachten und das letzte Türchen hat sich geöffnet. Der letzte Teil meine Adressbuches steht noch aus und das möchte ich euch jetzt geben. Es ist der serverseitige Teil meine kleinen Weanwendung. Ich habe dazu eine mySQL-Datenbank angelegt und greife mit PHP auf den Datenbestand zu. Ähnlich wie in Teil [...]]]></description>
			<content:encoded><![CDATA[<p>Nun ist es soweit, heute ist Weihnachten und das letzte Türchen hat sich geöffnet. Der letzte Teil meine Adressbuches steht noch aus und das möchte ich euch jetzt geben. Es ist der serverseitige Teil meine kleinen Weanwendung. Ich habe dazu eine <a href="http://www.mysql.com">mySQL-Datenbank</a> angelegt und greife mit PHP auf den Datenbestand zu.</p>
<p><span id="more-101"></span></p>
<p>Ähnlich wie in <a title="AJAX Adressbuch Teil 2" href="http://www.re-design.de/workbook/?p=91">Teil 2</a> und <a title="AJAX Adressbuch Teil 3" href="http://www.re-design.de/workbook/?p=96">Teil 3</a> werde ich mehrere Datei benutzen um alles geordnet zu haben. Aber als erstes die Scripte zum Erzeugen der Datenbank und des Datenbestandes.</p>
<ol class="Sourcecode">
<li><code>CREATE DATABASE `demodb` DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci; USE `demodb`;</code></li>
</ol>
<ol class="Sourcecode">
<li><code>CREATE TABLE `mitarbeiter` (</code></li>
<li><code> `id` int(11) NOT NULL auto_increment,</code></li>
<li><code> `nachname` varchar(255) NOT NULL,</code></li>
<li><code> `vorname` varchar(255) NOT NULL,</code></li>
<li><code> `email` varchar(255) NOT NULL,</code></li>
<li><code> `telefon` varchar(255) NOT NULL,</code></li>
<li><code>PRIMARY KEY (`id`)</code></li>
<li><code>); </code></li>
</ol>
<p>Also <a title="phpMyAdmin | MySQL Database Administration Tool" href="http://www.phpmyadmin.net">phpMyAdmin</a>, das ultimative Datenbank-Tool, öffnen und die Codes einfügen. Dazu noch einen Datenbank-Benutzer und ein dazugehöriges Passwort anlegen. In meinem Fall heißt der Benutzer &#8220;<code>demouser</code>&#8221; und sein Passwort ist &#8220;<code>password</code>&#8220;.</p>
<p>Als nächstes lege ich mir immer eine PHP-Datei an, die die Verbindung zur Datenbank regelt. Somit muss ich die Daten nicht in jedes Script hineinschreiben.</p>
<ol class="Sourcecode">
<li><code>&lt;?php</code></li>
<li><code>$connect = mysql_connect('localhost', 'demouser', 'password');</code></li>
<li><code>mysql_select_db('mitarbeiter', $connect);</code></li>
<li><code>?&gt;</code></li>
</ol>
<p>In der Variable <code>$connect</code> wird dann die Verbindung zum Datenbank-Server gespeichert und kann von nun an genutzt werden. Ich habe hier der Einfachheit halber auf Fehlermeldungen verzichtet.</p>
<ol class="Sourcecode">
<li><code>header('Content-Type: text/xml');</code></li>
<li><code>$xml = new DOMDocument('1.0', 'utf-8');</code></li>
<li><code>$root = $xml-&gt;createElement('mitarbeiter');</code></li>
<li><code>$xml-&gt;appendChild($root);</code></li>
<li></li>
<li></li>
<li><code>echo $xml-&gt;saveXML();</code></li>
</ol>
<p>Um mit PHP eine <abbr title="Extensable Markup Language">XML</abbr>-Ausgabe zu erzeugen, reicht der obige Quellcode. Wichtig dabei ist das der richtige Header an den Browser geschickt wird.</p>
<p>Danach wird ein XML-Objekt mit dem Zeichensatz &#8220;utf-8&#8243; generiert. Weiterhin wird ein Hauptknoten erzeugt und an das XML-Dokument dran gehangen. Zum Schluss alles an den Browser geschickt.</p>
<p>Soweit die Grundstruktur der XML-Ausgabe. Aber es fehlen ja noch die eigentlichen Inhalte aus der Datenbank.</p>
<ol class="Sourcecode">
<li><code>&lt;?php</code></li>
<li><code>include_once('include.php');</code></li>
<li></li>
<li><code>$sql = 'SELECT * FROM personen ORDER BY nachname';</code></li>
<li><code>$result = mysql_query($sql, $connect);</code></li>
<li><code>while($rs = mysql_fetch_assoc($result))</code></li>
<li><code>{</code></li>
<li><code> $nachname = $xml-&gt;createElement('nachname');</code></li>
<li><code> $nachname-&gt;appendChild($xml-&gt;createTextNode(iconv('iso-8859-1','utf-8',$rs['nachname'])));</code></li>
<li><code> $vorname = $xml-&gt;createElement('vorname');</code></li>
<li><code> $vorname-&gt;appendChild($xml-&gt;createTextNode(iconv('iso-8859-1','utf-8',$rs['vorname'])));</code></li>
<li><code> $email = $xml-&gt;createElement('email');</code></li>
<li><code> $email-&gt;appendChild($xml-&gt;createTextNode(iconv('iso-8859-1','utf-8',$rs['email'])));</code></li>
<li><code> $telefon = $xml-&gt;createElement('telefon');</code></li>
<li><code> $telefon-&gt;appendChild($xml-&gt;createTextNode(iconv('iso-8859-1','utf-8',$rs['telefon'])));</code></li>
<li><code> $person = $xml-&gt;createElement('person');</code></li>
<li><code> $person-&gt;setAttribute('id', $rs['id']);</code></li>
<li><code> $person-&gt;appendChild($nachname);</code></li>
<li><code> $person-&gt;appendChild($vorname);</code></li>
<li><code> $person-&gt;appendChild($email);</code></li>
<li><code> $person-&gt;appendChild($telefon);</code></li>
<li><code> $root-&gt;appendChild($person);</code></li>
<li><code>}</code></li>
<li></li>
<li><code>mysql_close($connect);</code></li>
<li><code>?&gt;</code></li>
</ol>
<p>Dazu binde ich als erstes die externe Datei zum Verbinden mit dem Datenbank-Server ein. Danach speichere ich das <abbr title="Structed Query Language">SQL</abbr>-Statement in einer Variablen zwischen und hole von der Datenbank alle Ergebnisse dieser Anfrage.</p>
<p>In der darauffolgenden <code>while</code>-Schleife werden neue Knoten erzeugt und an den Root dran gehangen. Dabei setzt sich der Nachname-Knoten z.B. wie folgt zusammen. Ich erzeuge als erstes einen <code>&lt;nachname&gt;</code>-Tag und hänge dann mit der <code>createTextNode()</code>-Methode einen Text-Knoten dran. Den Text den ich da dran hänge, konvertiere ich zuvor noch mit der <code>iconv()</code>-Funktion in den richtigen Zeichensatz. Zum Schluss hänge ich dem <code>&lt;person&gt;</code>-Tag alle Unterknoten dran.</p>
<p>Soweit die Ausgabe zum Browser, bzw. zu JavaScript und meiner <abbr title="Asyncron JavaScript and XML">AJAX</abbr>-Klasse. Was noch fehlt ist ein Script um Daten von JavaScript in Empfang zu nehmen und in die Datenbank einzufügen.</p>
<ol class="Sourcecode">
<li><code>&lt;?php</code></li>
<li><code>include('include.php');</code></li>
<li><code>$sql = sprintf('REPLACE INTO personen SET</code></li>
<li><code> id=%d, </code></li>
<li><code> nachname="%s", </code></li>
<li><code> vorname="%s", </code></li>
<li><code> email="%s",</code></li>
<li><code> telefon="%s"'</code></li>
<li><code> ,$_POST['f0'],$_POST['f1'],$_POST['f2'],$_POST['f3'],$_POST['f4']);</code></li>
<li><code>mysql_query($sql, $connect);</code></li>
<li><code>mysql_close();</code></li>
<li><code>?&gt;</code></li>
</ol>
<p>Auch hier ist der Quellcode sehr überschaubar. Als erstes binde ich wieder Das Script zum Erzeugen einer Verbindung zum Datenbank-Server ein. Dann speichere ich wieder in einer Variablen das SQL-Statement zwischen. Um ein korrektes Ergebnis zu bekommen, verwende ich hier die sprinf()-Funktion. Diese bietet mir eine kleiner Kontrolle über die übergebenen Werte. Zum Schluss schicke ich das Ganze nur noch an der Server und fertig ist das Einfügen neuer oder das Ändern von bestehenden Datensätzen. Ich verwende dazu immer ganz gern das REPLACE-Statement. Wenn dieses Statement keine ID besitzt wird ein neuer Datensatz erzeugt, ansonsten wird der Bestehende verändert.</p>
<ul>
<li><a title="komplettes Set" href="ftp://weblabor.re-design.de/AJAX-Adressbuch.zip">Download</a></li>
</ul>
<p>So und das war es auch schon mit der serverseitigen Programmierung. Gerade mal 3 kleine Script brauche ich hier um der ganzen Webanwendung auch das Speichern auf dem Server bzw. das Einlesen von Daten hinzuzufügen.</p>
<p>Ich hoffe es hat euch gefallen 24 meist kleine Beträge aus meinen Arbeitsalltag zu lesen. Ich gebe zu, es war nicht immer leicht die Texte rechtzeitig fertig zu stellen und ich verspreche, wie immer und alle, nächstes Jahr rechtzeitig mit den Vorbereitungen zu beginnen.</p>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2008/01/29/ajax-adressbuch/" title="AJAX Adressbuch">AJAX Adressbuch</a></li><li><a href="http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/" title="AJAX Abressbuch &#8211; Tutorial Teil 3">AJAX Abressbuch &#8211; Tutorial Teil 3</a></li><li><a href="http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/" title="AJAX Adressbuch &#8211; Tutorial Teil 2">AJAX Adressbuch &#8211; Tutorial Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/21/ajax-adressbuch-tutorial-teil-1/" title="AJAX Adressbuch &#8211; Tutorial Teil 1">AJAX Adressbuch &#8211; Tutorial Teil 1</a></li><li><a href="http://www.re-design.de/2009/03/04/einzelcoaching-php-xml-schulung/" title="Einzelcoaching &ndash; PHP-XML Schulung">Einzelcoaching &ndash; PHP-XML Schulung</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2007/12/24/ajax-adressbuch-tutorial-teil-4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AJAX Abressbuch &#8211; Tutorial Teil 3</title>
		<link>http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/</link>
		<comments>http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/#comments</comments>
		<pubDate>Sun, 23 Dec 2007 00:00:24 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Adventskalender 2007]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Webanwendung]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=96</guid>
		<description><![CDATA[Im dritten Teil meines Tutorials möchte ich euch zeigen wie ich per JavaScript eine Verbindung zum Server aufbaue und Daten zum Server schicke bzw. vom Server hole. Durch die Beschreibung in Teil 1 und Teil 2 meines Tutorials habe ich hoffentlich eine gute Basis geschaffen einen Schritt weiter zu gehen. Ok, als erstes wieder einmal [...]]]></description>
			<content:encoded><![CDATA[<p>Im dritten Teil meines Tutorials möchte ich euch zeigen wie ich per JavaScript eine Verbindung zum Server aufbaue und Daten zum Server schicke bzw. vom Server hole. Durch die Beschreibung in <a title="AJAX Adressbuch Teil 1" href="http://www.re-design.de/workbook/?p=89">Teil 1</a> und <a title="AJAX Adressbuch Teil 2" href="http://www.re-design.de/workbook/?p=91">Teil 2</a> meines Tutorials habe ich hoffentlich eine gute Basis geschaffen einen Schritt weiter zu gehen.</p>
<p><span id="more-96"></span></p>
<p>Ok, als erstes wieder einmal die Zusammenfassung aller Eigenschaften und Methoden der RED-Ajax-Objektes.</p>
<ol class="Sourcecode">
<li><code>// JavaScript Document</code></li>
<li><code>var RED_Ajax =</code></li>
<li><code>{</code></li>
<li><code> req : null,</code></li>
<li><code> url : null,</code></li>
<li><code> method : 'GET',</code></li>
<li><code> async : false,</code></li>
<li><code> body : null,</code></li>
<li><code> headers : [],</code></li>
<li><code> timer : null,</code></li>
<li><code> responseXML : null,</code></li>
<li><code> responseText : null,</code></li>
<li><code> init : function()</code> <code>{</code> <code>},</code></li>
<li><code> run : function()</code> <code>{</code> <code>},</code></li>
<li><code> header : function() </code><code>{</code><code>},<br />
</code></li>
<li><code> response : function()</code> <code>{</code><code>},<br />
</code></li>
<li><code> callback : function() {},</code></li>
<li><code> update : function() {},</code></li>
<li><code> error : function()</code> <code>{</code> <code>}</code></li>
<li><code>}</code></li>
</ol>
<p>Ich werde jetzt nicht alle Eigenschaften im Detail erklären, denn das passiert auf jeden Fall noch bei der Erklärung der einzelnen Methoden. Ich fange lieber direkt mit den Methoden an.</p>
<ol class="Sourcecode">
<li><code> init : function()</code></li>
<li><code> {</code></li>
<li><code> this.req = (window.XMLHttpRequest)</code></li>
<li><code> ?</code></li>
<li><code> new XMLHttpRequest()</code></li>
<li><code> :</code></li>
<li><code> ((window.ActiveXObject)</code></li>
<li><code> ?</code></li>
<li><code> new ActiveXObject('Microsoft.XMLHTTP')</code></li>
<li><code> :</code></li>
<li><code> null</code></li>
<li><code> );</code></li>
<li></li>
<li><code> if(this.req != null)</code></li>
<li><code> {</code></li>
<li><code> this.req.onreadystatechange = this.response;</code></li>
<li><code> }</code></li>
<li><code> },</code></li>
</ol>
<p>Wie immer gibt es bei mir eine <code>init()</code>-Methode. Diese hier legt in der reg-Eigenschaft ein Objekt ab, welche eine Verbindung zum Server aufbauen kann. Da jeder Browser ein anderes Objekt dazu benutzt, muss hier immer erst noch geprüft werden ob das ganze auch funktioniert. Wenn alles geklappt hat wird noch auf den readystatechange-Event ein Methodenverweise gemacht.</p>
<ol class="Sourcecode">
<li><code> run : function(u,m,f,b)</code></li>
<li><code> {</code></li>
<li><code> this.method = m || this.method;</code></li>
<li><code> this.async = f || this.async;</code></li>
<li><code> this.body = b || this.body;</code></li>
<li><code> this.url = u;</code></li>
<li><code> if(this.req != null)</code></li>
<li><code> {</code></li>
<li><code> this.req.open(this.method, this.url, this.async);</code></li>
<li><code> if(this.headers.length &gt; 0)</code></li>
<li><code> {</code></li>
<li><code> for(var i=0; i&lt;this.headers.length; i+=2)</code></li>
<li><code> {</code></li>
<li><code> this.req.setRequestHeader(this.headers[i], this.headers[i+1]);</code></li>
<li><code> }</code></li>
<li><code> }</code></li>
<li><code> this.req.send(this.body);</code></li>
<li><code> }</code></li>
<li><code> },</code></li>
</ol>
<p>Um dann aber auch die eigentlichen Daten vom bzw. zum Server zu schicken gibt es die <code>run()</code>-Methode. Ihr kann bis zu 4 Parameter mit übergeben werden, wobei der erste, die <abbr title="Uniform Resource Location">URL</abbr>-Angabe, nur Pflicht ist. Die weiteren Parameter sind die Übertragungsmethode (<code>GET</code> oder <code>POST</code>), ob die Ubertragung synchron (<code>true</code>) oder asynchron (<code>false</code>) stattfinden soll und der beim Senden mitgelieferte Body.</p>
<p>Bevor der Request aber geschickt wird, werden die im Vorfeld gesetzte Header-Angaben verarbeitet.</p>
<ol class="Sourcecode">
<li><code> header : function(k,v)</code></li>
<li><code> {</code></li>
<li><code> if(k != null)</code></li>
<li><code> {</code></li>
<li><code> this.headers.push(k);</code></li>
<li><code> this.headers.push(v);</code></li>
<li><code> }</code></li>
<li><code> }, </code></li>
</ol>
<p>Um eine Header-Angabe, die später mit übertragen werden soll, zu setzten, reicht es die <code>header()</code>-Methode mit ihren beiden Parametern <code>key</code> und <code>value</code> aufzurufen.</p>
<ol class="Sourcecode">
<li><code> response : function()</code></li>
<li><code> {</code></li>
<li><code> var a = ajax.req;</code></li>
<li><code> switch(a.readyState)</code></li>
<li><code> {</code></li>
<li><code> case 1:</code></li>
<li><code> break;</code></li>
<li><code> case 2:</code></li>
<li><code> this.timer = window.setTimeout(this.error, 10000);</code></li>
<li><code> break;</code></li>
<li><code> case 3: </code></li>
<li><code> this.timer = window.setTimeout(this.error, 10000);</code></li>
<li><code> break;</code></li>
<li><code> case 4:</code></li>
<li><code> window.clearTimeout(this.timer);</code></li>
<li><code> if(a.status==200 || a.statusText=='OK')</code></li>
<li><code> {</code></li>
<li><code> RED_Ajax.responseXML = a.responseXML;</code></li>
<li><code> RED_Ajax.responseText = a.responseText;</code></li>
<li><code> RED_Ajax.callback();</code></li>
<li><code> }</code></li>
<li><code> }</code></li>
<li><code> }, </code></li>
</ol>
<p>Beim Ausführen der Sende- bzw. Empfang-Vorganges durchläuft das Verbindungsobjekt verschiedene Stadien, die in der <code>response()</code>-Methode geprüft werden. Folgende Stati gibt es:</p>
<ol>
<li>Das Verbindungsobjekt existiert aber die <code>open()</code>-Methode wurde noch nicht aufgerufen.</li>
<li>Die <code>send()</code>-Methode wurde noch nicht ausgeführt.</li>
<li>Die <code>send()</code>-Methode wurde zwar ausgeführt, aber der Server hat noch nichts zurück geschickt.</li>
<li>Der Server hat angefangen Daten zu übermitteln, aber ist damit noch nicht fertig.</li>
<li>Der Übermittlungsvorgang wurde beendet und alle Date sind angekommen.</li>
</ol>
<p>Um den Übertragungsvorgang auch irgendwann abzubrechen, falls ein Fehler aufgetreten ist, habe ich im Status 2 und 3 eine Timeout eingefügt und hebe ihn im Status 4 wieder auf, da da ja alles angekommen ist. Wenn dann auch noch der Server mit &#8220;alles ok&#8221; übertragen hat, dann werden die übertragenen Werte einmal als reine Text und als <abbr title="Extentable Markup Language">XML</abbr>-Objekt abgespeichert. Zum Schluss rufe ich nur noch die <code>callback()</code>-Methode auf.</p>
<ol class="Sourcecode">
<li><code> callback : function(){},</code></li>
<li><code> update : function(){}</code>,</li>
</ol>
<p>Meine <code>callback()</code>-Methode ist ein sogenannter Huck und muss erst noch definiert werden. Ich habe deshalb offen gelassen, weil die Verarbeitung der übertragenen Daten sehr unterschiedlich sein kann. In Teil 2 habe ich erklärt wo und wie man diese Definition einsetzt.</p>
<p>Auch habe ich eine <code>update()</code>-Methode zwar eingesetzt, aber noch nicht definiert. Hier lasse ich mir die Möglichkeit offen zu einem späteren Zeitpunkt einen zyklischen Aufruf des Server zu bauen.</p>
<ol class="Sourcecode">
<li><code> error : function()</code></li>
<li><code> {</code></li>
<li><code> alert('Die Zeit ist um!');</code></li>
<li><code> this.req.abort();</code></li>
<li><code> }</code></li>
</ol>
<p>Meine letzte Methode ist die <code>error()</code>-Methode. Sie dient ausschließlich dazu bei zu langen Ladezeiten diesen Vorgang abzugrechen.</p>
<p>Wie immer gibt es zum Schluss den Download der beschriebenen Dateien:</p>
<ul>
<li><a title="RED_AJAX Datei" href="ftp://weblabor.re-design.de/AJAX-Adressbuch.zip">RED_AJAX Datei</a></li>
</ul>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/" title="AJAX Adressbuch &#8211; Tutorial Teil 2">AJAX Adressbuch &#8211; Tutorial Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/21/ajax-adressbuch-tutorial-teil-1/" title="AJAX Adressbuch &#8211; Tutorial Teil 1">AJAX Adressbuch &#8211; Tutorial Teil 1</a></li><li><a href="http://www.re-design.de/2007/12/24/ajax-adressbuch-tutorial-teil-4/" title="AJAX Adressbuch &#8211; Tutorial Teil 4">AJAX Adressbuch &#8211; Tutorial Teil 4</a></li><li><a href="http://www.re-design.de/2007/12/19/slideshow-mit-einer-html-seite-teil-2/" title="Slideshow mit einer HTML-Seite Teil 2">Slideshow mit einer HTML-Seite Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/18/slideshow-mit-einer-html-seite-teil-1/" title="Slideshow mit einer HTML-Seite Teil 1">Slideshow mit einer HTML-Seite Teil 1</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>AJAX Adressbuch &#8211; Tutorial Teil 2</title>
		<link>http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/</link>
		<comments>http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/#comments</comments>
		<pubDate>Sat, 22 Dec 2007 00:00:22 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Adventskalender 2007]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=91</guid>
		<description><![CDATA[Nachdem ich gestern erklärt habe wie die HTML-Datei, das dazugehörige CSS-Design und die XML-Datenstruktur aufgebaut sind, werde ich mich nun der clientseitigen Programmierung widmen. Die Programmierung besteht hier nun aus 2 JavaScript-Dateien. Die eine ist für die Verarbeitung der Daten und die andere regelt die Übertragung zum und vom Server. Fangen wir nun mir der [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem ich <a title="AJAX Adressbuch Teil 1" href="http://www.re-design.de/2007/12/21/ajax-adressbuch-tutorial-teil-1/">gestern</a> erklärt habe wie die <abbr title="Hypertext Markup Language">HTML</abbr>-Datei, das dazugehörige <abbr title="Cascading Style Sheet">CSS</abbr>-Design und die <abbr title="Extentable Markup Language">XML</abbr>-Datenstruktur aufgebaut sind, werde ich mich nun der clientseitigen Programmierung widmen.</p>
<p>Die Programmierung besteht hier nun aus 2 JavaScript-Dateien. Die eine ist für die Verarbeitung der Daten und die andere regelt die Übertragung zum und vom Server.</p>
<p><span id="more-91"></span></p>
<p>Fangen wir nun mir der Verarbeitung an. Um in diesem Stadium der Programmierung nicht schon die serverseitigen Scripte geschrieben zu haben, arbeite ich immer mit einer Demo-XML-Datei.</p>
<ol class="Sourcecode">
<li><code>// JavaScript Document</code></li>
<li><code>var RED_Adrbook = </code></li>
<li><code>{</code></li>
<li><code> data : [],</code></li>
<li><code> alerts : </code><code>{</code> <code>},</code></li>
<li><code> zeiger : 0,</code></li>
<li><code> init : function()</code><code>{</code> <code>},</code></li>
<li><code> loadXML : function()</code> <code>{ </code><code>},</code></li>
<li><code> loadData : function(xml)</code> <code>{</code> <code>},</code></li>
<li><code> loadEvents : function()</code> <code>{</code> <code>},</code></li>
<li><code> loadSlides : function()</code> <code>{</code> <code>},</code></li>
<li><code> pager : function()</code> <code>{</code> <code>},</code></li>
<li><code> add : function()</code> <code>{</code> <code>},</code></li>
<li><code> insert : function()</code> <code>{</code> <code>},</code></li>
<li><code> edit : function()</code> <code>{},</code></li>
<li><code> update : function() </code><code>{</code><code>},</code></li>
<li><code> remove : function() {</code><code>}</code></li>
<li><code>}</code></li>
</ol>
<p>Wie schon bei den letzten Beispielen verwende ich bei solcher Programmierung gerne Literale. Die Eingenschaft data dient dann später dazu alle vom Server bekommen Kontakte in einen einzigen Array zu sammeln. Über die Eigenschaft zeiger wird dann das Weiterschalten zum nächsten Mitarbeiter geregelt. Die letzte Eigenschaft innerhalb des Objektes verwende ich um Meldungen vom System an den Benutzer zu kapseln. Ich habe mir dazu ein Unterobjekt angelegt.</p>
<p>Kommen wir nun zu den einzelnen Methoden des Obejktes:</p>
<ol class="Sourcecode">
<li><code> init : function()</code></li>
<li><code> {</code></li>
<li><code> RED_Ajax.init();</code></li>
<li><code> this.loadXML();</code></li>
<li><code> },</code></li>
</ol>
<p>In fast jedem Objekt lege ich eine <code>init()</code>-Methode an, um alle wichtigen Prozesse zu starten, die vor der eigentlichen Benutzung durch den Anwender gebraucht werden. In diesem Fall ist das die Vorbereitung der Verbindung zum Server und dann das Laden der XML-Daten vom Server.</p>
<ol class="Sourcecode">
<li><code> loadXML : function()</code></li>
<li><code> {</code></li>
<li><code> RED_Ajax.callback = function()</code></li>
<li><code> {</code></li>
<li><code> RED_Adrbook.loadData(this.responseXML);</code></li>
<li><code> };</code></li>
<li><code> RED_Ajax.run('mitarbeiter.xml','GET',false);</code></li>
<li><code> },</code></li>
</ol>
<p>Um die empfangen XML-Daten auch später zu verarbeiten, muss der Huck, also die <code>callback()</code>-Methode des RED_AJAX-Objektes definiert werden. Ich rufe hier die <code>loadData()</code>-Methode des <code>RED_AdrBook</code> auf und übergebe ihr die empfangenen XML-Werte. Nach allen Vorbereitungen rufe ich die <code>run()</code>-Methode auf und übergebe ihr als erstes die zu ladende Datei, dann mit welcher Methode die Übertragung stattfinden soll und zum Schluss ob es sich um eine synchrone Übertragung handelt. Nur selten ändern sich die beiden letzten Werte.</p>
<ol class="Sourcecode">
<li><code> loadData : function(xml)</code></li>
<li><code> {</code></li>
<li><code> this.data = [];</code></li>
<li><code> var personen = xml.getElementsByTagName('person');</code></li>
<li><code> for(var i=0; i&lt;personen.length; i++)</code></li>
<li><code> {</code></li>
<li><code> var person = {</code></li>
<li><code> Nachname : personen[i].childNodes[0].firstChild.nodeValue,</code></li>
<li><code> Vorname : personen[i].childNodes[1].firstChild.nodeValue,</code></li>
<li><code> Email : personen[i].childNodes[2].firstChild.nodeValue,</code></li>
<li><code> Telefon : personen[i].childNodes[3].firstChild.nodeValue,</code></li>
<li><code> ID : personen[i].getAttribute('id')</code></li>
<li><code> };</code></li>
<li><code> this.data.push(person);</code></li>
<li><code> }</code></li>
<li><code> this.loadEvents();</code></li>
<li><code> this.loadSlides();</code></li>
<li><code> },</code></li>
</ol>
<p>Nachdem alle Daten vom Server übertragen wurden, kann die eigentliche Verarbeitung beginnen. Als erstes leere ich den Array und hole mir aus den übergebenen Wert einen Array mit allen Mitarbeitern. Diesen Array durchlaufe ich und erzeuge mir ein eigenes Personen-Objekt zur späteren besseren Verarbeitung. Dieses Personen-Objekt wird dann im Data-Array abgespeichert.</p>
<p>Zum Schluss müssen natürlich noch die Events für die Buttons festgelegt werden und das aktuelle Slide, also der aktuelle, hier der erste, Mitarbeiter angezeigt werden.</p>
<ol class="Sourcecode">
<li><code> loadEvents : function()</code></li>
<li><code> {</code></li>
<li><code> document.getElementById('btn_next').onclick = function() </code><code>{</code></li>
<li><code> RED_Adrbook.pager(true);</code></li>
<li><code> }</code></li>
<li><code> document.getElementById('btn_prev').onclick = function() {</code></li>
<li><code> RED_Adrbook.pager(false);</code></li>
<li><code> }</code></li>
<li><code> document.getElementById('btn_edit').onclick = function() {</code></li>
<li><code> RED_Adrbook.edit();</code></li>
<li><code> </code><code>}</code></li>
<li><code> document.getElementById('btn_add').onclick = function() {</code></li>
<li><code> RED_Adrbook.add();</code></li>
<li><code> }</code></li>
<li><code> document.getElementById('btn_remove').onclick = function() {</code></li>
<li><code> RED_Adrbook.remove();</code></li>
<li><code> }</code></li>
<li><code> },</code></li>
</ol>
<p>Das festlegen welche Funktionen welcher Button hat ist recht einfach, da es dafür separate Methoden gibt.</p>
<ol class="Sourcecode">
<li><code> loadSlides : function()</code></li>
<li><code> {</code></li>
<li><code> var s = document.getElementById('RED_Book').getElementsByTagName('span');</code></li>
<li><code> s[0].innerHTML = this.zeiger;</code></li>
<li><code> s[1].innerHTML = this.data[this.zeiger]['Nachname'];</code></li>
<li><code> s[2].innerHTML = this.data[this.zeiger]['Vorname'];</code></li>
<li><code> s[4].innerHTML = this.data[this.zeiger]['Telefon'];</code></li>
<li><code> var link = '&lt;a href="mailto:';</code></li>
<li><code> link += this.data[this.zeiger]['Email'];</code></li>
<li><code> link += '"&gt;';</code></li>
<li><code> link += this.data[this.zeiger]['Email'];<br />
</code></li>
<li><code> link += '&lt;/a&gt;';</code></li>
<li><code> s[3].innerHTML = link;</code></li>
<li><code> },</code></li>
</ol>
<p>Bei Laden des aktuelle Slides werden als erstes alle <code>&lt;span&gt;</code>-Tags aus dem Formular mit der ID <code>RED_Book</code> in eine Array geladen. Dann werden die Daten aus dem aktuellen Silde per <code>innerHTML</code> in die Spans zugewiesen. Das <code>this.zeiger</code> immer den aktuellen Zeiger repräsentiert ist das ganze kein größeres Problem. Selbst eine <code>mailto:</code>-Link zu erzeugen stellt keine große Hürde da.</p>
<ol class="Sourcecode">
<li><code> pager : function(d)</code></li>
<li><code> {</code></li>
<li><code> if(d)</code></li>
<li><code> {</code></li>
<li><code> (this.zeiger == this.data.length-1) ?alert(this.alerts.last) :this.zeiger++; </code></li>
<li><code> }</code></li>
<li><code> else</code></li>
<li><code> {</code></li>
<li><code> (this.zeiger == 0) ?alert(this.alerts.first) :this.zeiger--;</code></li>
<li><code> }</code></li>
<li><code> this.loadSlides();</code></li>
<li><code> },</code></li>
</ol>
<p>Für der vor und zurück Blättern gibt es eine kleine und einfache Methode, die als erstes prüft wo der Zeiger steht und am Ende bzw. am Anfang der Liste diesen korrigiert. Dann wird noch per <code>loadSlides()</code>-Methode der richtige Mitarbeiter angezeigt.</p>
<ol class="Sourcecode">
<li><code> add : function()</code></li>
<li><code> {</code></li>
<li><code> var s = document.getElementById('RED_Book').getElementsByTagName('span');</code></li>
<li><code> s[0].innerHTML = 'neuer Datensatz';</code></li>
<li><code> s[0].innerHTML += '&lt;input type="hidden" name="f0" value="" /&gt;';</code></li>
<li><code> s[1].innerHTML = '&lt;input type="text" name="f1" /&gt;';</code></li>
<li><code> s[2].innerHTML = '&lt;input type="text" name="f2" /&gt;';</code></li>
<li><code> s[3].innerHTML = '&lt;input type="text" name="f3" /&gt;';</code></li>
<li><code> s[4].innerHTML = '&lt;input type="text" name="f4" /&gt;';</code></li>
<li><code> s[4].innerHTML += '&lt;br /&gt;';s[4].innerHTML += '&lt;input type="button" id="btn_save" value="speichern" /&gt;';</code></li>
<li><code> s[4].innerHTML += '&lt;input type="button" id="btn_cancel" value="abbrechen" /&gt;';</code></li>
<li><code> document.getElementById('btn_save').onclick = function()</code> <code>{</code></li>
<li><code> RED_Adrbook.insert(document.getElementById('RED_Book'));</code></li>
<li><code> };</code></li>
<li><code> document.getElementById('btn_cancel').onclick = function()</code> <code>{</code></li>
<li><code> RED_Adrbook.loadSlides();</code></li>
<li><code> };</code></li>
<li><code> document.getElementsByTagName('input')[1].focus();</code></li>
<li><code> },</code></li>
</ol>
<p>In der <code>add()</code>-Methode werden die Inhalte der <code>&lt;span&gt;</code>-Tags gelöscht und durch leere Eingabefelder erstetzt. Zusätzlich wird ein Speichern- und Cancel-Button eingefügt und ihnen natürlich auch noch die richtige Funktionalität zugewiesen. Zum Schluss bekommt das erste Eingabefeld den Focus, so dass der Anwender direkt losschreiben kann.</p>
<ol class="Sourcecode">
<li><code> insert : function(form)</code></li>
<li><code> {</code></li>
<li><code> var inputs = form.getElementsByTagName('input');</code></li>
<li><code> var body = 'f0='+escape(inputs[0].value)+'&amp;'+</code> <code>'f1='+escape(inputs[1].value)+'&amp;'+</code> <code>'f2='+escape(inputs[2].value)+'&amp;'+</code> <code>'f3='+escape(inputs[3].value)+'&amp;'+</code> &#8216;<code>f4='+escape(inputs[4].value);</code></li>
<li><code> RED_Ajax.callback = function()</code></li>
<li><code> {</code></li>
<li><code> RED_Adrbook.loadXML();</code></li>
<li><code> };</code></li>
<li><code> RED_Ajax.header('Content-Type', 'application/x-www-form-urlencoded');</code></li>
<li><code> RED_Ajax.run('eingabe.php','POST',false,body);</code></li>
<li><code> },</code></li>
</ol>
<p>Um die neu eingefügten, bzw. später geänderten Daten auch an der Server und damit in die Datenbank zu schreiben, wird beim Klick auf den Speichern-Button die <code>insert()</code>-Methode aufgerufen. Sie lädt alle Eingabefelder und fügt sie zu einem langen String mit <abbr title="Uniform Resource Location">URL</abbr>-konformer Schreibweise zusammen. Dann wird eine neue <code>callback()</code>-Methode des RED_Ajax-Objektes definiert, der Header zum Übertragen von Formular-Daten geändert und die Date an das Verarbeitungsscript gesendet. Nach dem Senden wird wiederum die <code>loadXML()</code>-Methode aufgerufen, um die neuen Daten vom Server abzufragen und anzugeigen.</p>
<ol class="Sourcecode">
<li><code> edit : function()</code> <code>{},</code></li>
<li><code> update : function(form) </code><code>{</code><code>},</code></li>
<li><code> remove : function() {</code><code>}</code></li>
<li><code>}</code></li>
</ol>
<p>Bleiben zum Schluss noch 3 weiter Methoden übrig. Als kleine Herausforderung habe ich mir überlegt diese von euch selber erstellen zu lassen. Das ist auch gar nicht so schwer.</p>
<p>Z.B. ähnelt die <code>edit()</code>-Methode ja der <code>add()</code>-Methode, nur dass hier jetzt noch die Daten des aktuellen Mitgliedes eingefügt werden müssen. Auch die <code>update()</code>-Methode ist nur eine abgewandelte Version der <code>insert()</code>-Methode und bei der <code>remove()</code>-Methode brauch ja nur die aktuelle ID an den Server übermittelt werden, um den richtigen Datansatz zu löschen. Ich glaube fest daran, dass das jeder Lesen schaffen kann.</p>
<p>Hier nochmals die gesamte JavaScript-Datei zum Download.</p>
<ul>
<li><a title="Adressbuch-Datei" href="http://weblabor.re-design.de/AJAX-Adressbuch.zip">Adressbuch-Datei</a></li>
</ul>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/" title="AJAX Abressbuch &#8211; Tutorial Teil 3">AJAX Abressbuch &#8211; Tutorial Teil 3</a></li><li><a href="http://www.re-design.de/2007/12/21/ajax-adressbuch-tutorial-teil-1/" title="AJAX Adressbuch &#8211; Tutorial Teil 1">AJAX Adressbuch &#8211; Tutorial Teil 1</a></li><li><a href="http://www.re-design.de/2007/12/19/slideshow-mit-einer-html-seite-teil-2/" title="Slideshow mit einer HTML-Seite Teil 2">Slideshow mit einer HTML-Seite Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/18/slideshow-mit-einer-html-seite-teil-1/" title="Slideshow mit einer HTML-Seite Teil 1">Slideshow mit einer HTML-Seite Teil 1</a></li><li><a href="http://www.re-design.de/2007/12/24/ajax-adressbuch-tutorial-teil-4/" title="AJAX Adressbuch &#8211; Tutorial Teil 4">AJAX Adressbuch &#8211; Tutorial Teil 4</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>AJAX Adressbuch &#8211; Tutorial Teil 1</title>
		<link>http://www.re-design.de/2007/12/21/ajax-adressbuch-tutorial-teil-1/</link>
		<comments>http://www.re-design.de/2007/12/21/ajax-adressbuch-tutorial-teil-1/#comments</comments>
		<pubDate>Fri, 21 Dec 2007 00:00:56 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Adventskalender 2007]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Webanwendung]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=89</guid>
		<description><![CDATA[Nun möchte ich euch wieder einmal ein Tutorial schenken in dem ich zeigt wie man eine kleine Mini-Webanwendung erstellt. Da ich euch letztens schon mal eine kleine Slideshow mit HTML, CSS (Teil 1) und JavaScript (Teil 2) gezeigt habe, glaube ich dass dieses hier auch sehr interessant sein dürfte. In diesem Tutorial möcht ich euch [...]]]></description>
			<content:encoded><![CDATA[<p>Nun möchte ich euch wieder einmal ein Tutorial schenken in dem ich zeigt wie man eine kleine Mini-Webanwendung erstellt. Da ich euch letztens schon mal eine kleine Slideshow mit <abbr title="Hypertext MArkup Language">HTML</abbr>, <abbr title="Cascading Style Sheet">CSS</abbr> (<a title="Slideshow mit einer HTML-Seite Teil 1" href="http://www.re-design.de/2007/12/18/slideshow-mit-einer-html-seite-teil-1/">Teil 1</a>) und JavaScript (<a title="Slideshow mit einer HTML-Seite Teil 2" href="http://www.re-design.de/2007/12/19/slideshow-mit-einer-html-seite-teil-2/">Teil 2</a>) gezeigt habe, glaube ich dass dieses hier auch sehr interessant sein dürfte.</p>
<p>In diesem Tutorial möcht ich euch die Entwicklung, bzw. die wichtigsten Schritt zum Erstellen eines Web-Adressbuches zeigen. Dabei habe ich alles in 3 Teile aufgeteilt. Dass heißt heute zeige ich euch das Interface der Webanwendung, also die HTML-Datei und das dazugehörige Design. Morgen gibt es dann die clientseitige und übermorgen die serverseitige Programmierung.</p>
<p><span id="more-89"></span></p>
<ol class="Sourcecode">
<li><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</code></li>
<li><code>&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;</code></li>
<li><code>&lt;head&gt;</code></li>
<li><code>&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;</code></li>
<li><code>&lt;title&gt;RE-Design - AJAX - Adressbuch&lt;/title&gt;</code> <code><br />
</code></li>
<li><code>&lt;link rel="stylesheet" href="adressbook.css" type="text/css" media="screen" /&gt;</code></li>
<li><code>&lt;/head&gt;</code></li>
<li><code>&lt;body&gt;</code></li>
<li><code> &lt;div class="RED_Adrbook"&gt;</code></li>
<li><code> &lt;h1&gt;Adressbuch Demo&lt;/h1&gt;</code></li>
<li><code> &lt;noscript&gt;</code></li>
<li><code> &lt;p&gt;Ohne JavaScript ist hier nix los.&lt;/p&gt;</code></li>
<li><code> &lt;/noscript&gt;</code></li>
<li><code> &lt;form id="RED_Book"&gt;</code></li>
<li><code> &lt;table&gt;</code></li>
<li><code> &lt;tr&gt;</code></li>
<li><code> &lt;th&gt;ID:&lt;/th&gt;</code></li>
<li><code> &lt;td&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;</code></li>
<li><code> &lt;/tr&gt;</code></li>
<li><code> &lt;tr&gt;</code></li>
<li><code> &lt;th&gt;Name:&lt;/th&gt;</code></li>
<li><code> &lt;td&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;</code></li>
<li><code> &lt;/tr&gt;</code></li>
<li><code> &lt;tr&gt;</code></li>
<li><code> &lt;th&gt;Vorname:&lt;/th&gt;</code></li>
<li><code> &lt;td&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;</code></li>
<li><code> &lt;/tr&gt;</code></li>
<li><code> &lt;tr&gt;</code></li>
<li><code> &lt;th&gt;Email:&lt;/th&gt;</code></li>
<li><code> &lt;td&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;</code></li>
<li><code> &lt;/tr&gt;</code></li>
<li><code> &lt;tr&gt;</code></li>
<li><code> &lt;th&gt;Telefon:&lt;/th&gt;</code></li>
<li><code> &lt;td&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;</code></li>
<li><code> &lt;/tr&gt;</code></li>
<li><code> &lt;/table&gt;</code></li>
<li><code> &lt;ul class="RED_Buttons"&gt;</code></li>
<li><code> &lt;li&gt;&lt;a id="btn_prev"&gt;previous&lt;/a&gt;&lt;/li&gt;</code></li>
<li><code> &lt;li&gt;&lt;a id="btn_next"&gt;next&lt;/a&gt;&lt;/li&gt;</code></li>
<li><code> &lt;li&gt;&lt;a id="btn_edit"&gt;edit&lt;/a&gt;&lt;/li&gt;</code></li>
<li><code> </code><code>&lt;li&gt;&lt;a id="btn_add"&gt;add&lt;/a&gt;&lt;/li&gt;</code></li>
<li><code> &lt;li&gt;&lt;a id="btn_remove"&gt;delete&lt;/a&gt;&lt;/li&gt;</code></li>
<li><code> &lt;/ul&gt;</code></li>
<li><code> &lt;/form&gt;</code></li>
<li><code> &lt;/div&gt;</code></li>
<li><code>&lt;/body&gt;</code></li>
<li><code>&lt;/html&gt;</code></li>
</ol>
<p>Wie ihr seht ist in diesem Quellcode keine besonderen Tricks enthalten. An Anfang lade ich noch das externe Design. Die gesamte Anwendung ist dann in eine <code>&lt;div&gt;</code>-Container gebettet und die einzelnen Ein- und Ausgabefelder sind in eine Tabelle integriert. Dort wo später die Ein- und Ausgabe erfolgen soll habe ich <code>&lt;span&gt;</code>-Tags gesetzt um später einfacher per JavaScript darauf zu zugreifen.</p>
<p>Die Button zur Steuerung dieser Anwendung habe ich dann unterhalb der Tabelle un eine Liste leget. Es sind einfache Links, die aber kein Ziel haben. Klar sie sollen ja auch nicht irgendwohin anderes gehen!</p>
<ol class="Sourcecode">
<li><code>@charset "utf-8";</code></li>
<li><code>/* CSS Document */</code></li>
<li><code>body</code></li>
<li><code>{</code></li>
<li><code> margin:0 auto;</code></li>
<li><code> padding:0;</code></li>
<li><code> text-align:center;</code></li>
<li><code> width:28em;</code></li>
<li><code>}</code></li>
<li><code>th, td</code></li>
<li><code>{</code></li>
<li><code> vertical-align:top;</code></li>
<li><code>}</code></li>
</ol>
<p>Als erstes lege ich in der CSS-Datei fest wie die gesamte Seite auszusehen hat. Dabei beschränke ich mich hier erstmal nur auf die Zentrierung des Inhaltes und die Definierung der Gesamtbreite. Weiterhin werden alle Zellen der Tabelle vertikal oben ausgerichtet.</p>
<ol class="Sourcecode">
<li><code>.RED_Adrbook</code></li>
<li><code>{</code></li>
<li><code> margin: 1em 0 0;</code></li>
<li><code> padding:1em;</code></li>
<li><code> background-color:#fc3;</code></li>
<li><code> border:thin solid #960;</code></li>
<li><code> text-align:left;</code></li>
<li><code> font-family: Verdana, Arial, Helvetica, sans-serif;</code></li>
<li><code>}</code></li>
<li><code>.RED_Book table {</code></li>
<li><code> width:28em;</code></li>
<li><code> border-collapse:collapse;</code></li>
<li><code>}</code></li>
<li><code>.RED_Book th</code></li>
<li><code>{</code></li>
<li><code> text-align:left;</code></li>
<li><code> width: 6em;</code></li>
<li><code>}</code></li>
<li><code>.RED_Book h1</code></li>
<li><code>{</code></li>
<li><code> font-size:1.0em;</code></li>
<li><code> text-decoration:underline;</code></li>
<li><code>}</code></li>
</ol>
<p>Als nächstes definiere ich das Aussehen des eigentlichen Adressbuches. Hier wird die allgemeine Schriftart, Hintergrundfarbe etc. angegeben. Zusätzlich mache ich Angaben über die Breite der Tabellen und ihre Tabellenköpfe. Als letztes lege ich noch das Aussehen der Überschrift meiner Anwendung fest.</p>
<ol class="Sourcecode">
<li><code>.RED_Buttons</code></li>
<li><code>{</code></li>
<li><code> margin:1em 0 0;</code></li>
<li><code> padding:0;</code></li>
<li><code>}</code></li>
<li><code>.RED_Buttons li</code></li>
<li><code>{</code></li>
<li><code> margin:0;</code></li>
<li><code> padding:0;</code></li>
<li><code> list-style-type:none;</code></li>
<li><code> display:inline;</code></li>
<li><code>}</code></li>
</ol>
<p>Nun zur Button-Liste, auch hier verwende ich nur rudimentäre Formatierung. Alle Buttons sollen nebeneinander und nicht untereinander stehen. Am einfachsten geht das mit dem <code>inline</code>-Wert der <code>display</code>-Eigenschaft.</p>
<ol class="Sourcecode">
<li><code>#btn_prev,</code></li>
<li><code>#btn_next,</code></li>
<li><code>#btn_edit,</code></li>
<li><code>#btn_add,</code></li>
<li><code>#btn_remove,</code></li>
<li><code>#btn_save,</code></li>
<li><code>#btn_cancel</code></li>
<li><code>{</code></li>
<li><code> cursor:pointer;</code></li>
<li><code> padding:.2em;</code></li>
<li><code> background-color:#c63;</code></li>
<li><code> color:#fff;</code></li>
<li><code> text-decoration:none;</code></li>
<li><code> border:thin outset;<br />
</code></li>
<li><code> font-weight:normal;</code></li>
<li><code>}</code></li>
<li><code>#btn_prev:hover,</code></li>
<li><code>#btn_next:hover,</code></li>
<li><code>#btn_edit:hover,</code></li>
<li><code>#btn_add:hover,</code></li>
<li><code>#btn_remove:hover,</code></li>
<li><code>#btn_save:hover,</code></li>
<li><code>#btn_cancel:hover</code></li>
<li><code>{</code></li>
<li><code> background-color:#804000;</code></li>
<li><code>}</code></li>
<li><code>#btn_prev:active,</code></li>
<li><code>#btn_next:active,</code></li>
<li><code>#btn_edit:active,</code></li>
<li><code>#btn_add:active,</code></li>
<li><code>#btn_remove:active,</code></li>
<li><code>#btn_save:active,</code></li>
<li><code>#btn_cancel:active</code></li>
<li><code>{</code></li>
<li><code> border:thin inset;</code></li>
<li><code>}</code></li>
</ol>
<p>Zum Schluss nach das Aussehen der eigentlichen Buttons. Da es ja offiziell Links sind, wird ihre Darstellung komplett geändert. Zusätzlich bekommen sie noch eine <code>hover</code>- und einen <code>active</code>-Effekt, um das Feeling einer Interaktion weiter zu unterstützen.</p>
<ol class="Sourcecode">
<li><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;</code></li>
<li><code>&lt;mitarbeiter&gt;</code></li>
<li><code> &lt;person id="1"&gt;</code></li>
<li><code> &lt;nachname&gt;Reinsdorf&lt;/nachname&gt;</code></li>
<li><code> &lt;vorname&gt;Enrico&lt;/vorname&gt;</code></li>
<li><code> &lt;email&gt;enrico@re-design.de&lt;/email&gt;</code></li>
<li><code> &lt;telefon&gt;0177 - 2822557&lt;/telefon&gt;</code></li>
<li><code> &lt;/person&gt;</code></li>
<li><code> &lt;person id="2"&gt;</code></li>
<li><code> &lt;nachname&gt;Doe&lt;/nachname&gt;</code></li>
<li><code> &lt;vorname&gt;John&lt;/vorname&gt;</code></li>
<li><code> &lt;email&gt;john@doe.com&lt;/email&gt;</code></li>
<li><code> &lt;telefon&gt;0123 - 1234567&lt;/telefon&gt;</code></li>
<li><code> &lt;/person&gt;</code></li>
<li><code> &lt;person id="3"&gt;</code></li>
<li><code> &lt;nachname&gt;Doe&lt;/nachname&gt;</code></li>
<li><code> &lt;vorname&gt;Jane&lt;/vorname&gt;</code></li>
<li><code> &lt;email&gt;jane@doe.de&lt;/email&gt;</code></li>
<li><code> &lt;telefon&gt;0123 - 1234567&lt;/telefon&gt;</code></li>
<li><code> &lt;/person&gt;</code></li>
<li><code>&lt;/mitarbeiter&gt; </code></li>
</ol>
<p>Als letztes möchte ich euch noch die <abbr title="Extensible Markup Language">XML</abbr>-Datei zeigen, die ich zur ersten Verarbeitung in der Anwendung benutzt habe. Späte wird diese komplett dynamisch von <abbr title="PHP: Hypertext Preprocessor">PHP</abbr> bzw. in ähnlicher Form von JavaScript, erzeugt. Und spielt in der finalen Version keine große Rolle mehr.</p>
<p>Zum Schluss noch die gerade besprochenen Dateien zum Download:</p>
<ul>
<li><a title="direkt zum Download" href="ftp://weblabor.re-design.de/AJAX-Adressbuch.zip">Download</a></li>
</ul>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/" title="AJAX Abressbuch &#8211; Tutorial Teil 3">AJAX Abressbuch &#8211; Tutorial Teil 3</a></li><li><a href="http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/" title="AJAX Adressbuch &#8211; Tutorial Teil 2">AJAX Adressbuch &#8211; Tutorial Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/19/slideshow-mit-einer-html-seite-teil-2/" title="Slideshow mit einer HTML-Seite Teil 2">Slideshow mit einer HTML-Seite Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/18/slideshow-mit-einer-html-seite-teil-1/" title="Slideshow mit einer HTML-Seite Teil 1">Slideshow mit einer HTML-Seite Teil 1</a></li><li><a href="http://www.re-design.de/2008/02/11/css-import-macht-probleme/" title="CSS Import macht Probleme">CSS Import macht Probleme</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2007/12/21/ajax-adressbuch-tutorial-teil-1/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>AJAX-Klasse, einfach gebaut</title>
		<link>http://www.re-design.de/2007/12/15/ajax-klasse-einfach-gebaut/</link>
		<comments>http://www.re-design.de/2007/12/15/ajax-klasse-einfach-gebaut/#comments</comments>
		<pubDate>Fri, 14 Dec 2007 23:00:19 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Adventskalender 2007]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[beispiel]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[klasse]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=32</guid>
		<description><![CDATA[Bei der Erstellung von moderen Websites spielt AJAX eine immer wichtigere Rolle. In diesem Tutorial möchte ich euch eine kleine JavaScript-Klasse vorstellen. Diese Klasse kann dann Grundlage für weiter tolle Webanwendungen sein kann. Die einfache und trotzdem flexible Verwendung der erstellten Klasse lag mir dabei besonders am Herzen. Verwendung der AJAX-Klasse Eingebunden und verwendet wird [...]]]></description>
			<content:encoded><![CDATA[<p>Bei der Erstellung von moderen Websites spielt AJAX eine immer wichtigere Rolle. In diesem Tutorial möchte ich euch eine kleine JavaScript-Klasse vorstellen. Diese Klasse kann dann Grundlage für weiter tolle Webanwendungen sein kann.</p>
<p>Die einfache und trotzdem flexible Verwendung der erstellten Klasse lag mir dabei besonders am Herzen.<br />
<span id="more-32"></span></p>
<h3>Verwendung der AJAX-Klasse</h3>
<p>Eingebunden und verwendet wird die Klasse über folgende Befehle:</p>
<ol class="Sourcecode">
<li><code>&lt;script type="text/javascript" src="ajax.js"&gt;&lt;/script&gt; </code></li>
<li><code>&lt;script type="text/javascript"&gt; </code></li>
<li><code>//&lt;![CDATA[ </code></li>
<li><code>function afterLoad(xml) </code></li>
<li><code>{ </code></li>
<li><code>    alert(xml.toString()); </code></li>
<li><code>} </code></li>
<li><code>ajax.callback = function() </code></li>
<li><code>{ </code></li>
<li><code>    afterLoad(this.responseXML); </code></li>
<li><code>} </code></li>
<li><code>  </code></li>
<li><code>ajax.init(); </code></li>
<li><code>ajax.load('getXML.php'); </code></li>
<li><code>  </code></li>
<li><code>//]]&gt; </code></li>
<li><code>&lt;/script&gt;</code></li>
</ol>
<p>Wie ihr seht ist diese Verarbeitung sehr einfach einzusetzen. Als erstes muss natürlich die Klasse in das HTML-Dokument eingebunden werden. Dann legt man fest was passieren soll, wie die Daten verarbeiter werden sollen. Zusätzlich sollte man in der eigentlichen Klasse definieren das diese Funktion auch aufgerufen wird, sonst passiert gar nichts. Dazu habe ich einen sogenannten Hock vordefiniert, der dann einfach mit Funktionalität gefüllt wird. Zum Schluß initialisiert man nur nach die Klasse, um das XMLHttpRequest-Objekt anzulegen und läd dann die entsprechende Datei von Server. Fertig ist ist ein flexibles Ladesystem per JavaScript.</p>
<h3>Detail zur AJAX-Klasse</h3>
<p>Natürlich möchte ich euch auch noch den Inhalt meiner Klasse kurz präsentieren, denn ich denke dadurch wird der Ausbau ud die Erweiterung relativ einfach.</p>
<ol class="Sourcecode">
<li><code>var ajax = { </code></li>
<li><code>    req             : null, </code></li>
<li><code>    url             : null, </code></li>
<li><code>    method          : 'GET', </code></li>
<li><code>    async           : false, </code></li>
<li><code>    responseXML     : null, </code></li>
<li><code>    responseText    : null, </code></li>
<li><code>    init : function() </code></li>
<li><code>        { </code></li>
<li><code>            try </code></li>
<li><code>            { </code></li>
<li><code>                this.req = new XMLHttpRequest(); </code></li>
<li><code>            } </code></li>
<li><code>            catch(e) </code></li>
<li><code>            { </code></li>
<li><code>                try </code></li>
<li><code>                { </code></li>
<li><code>                    this.req = new ActiveXObject('Microsoft.XMLHTTP'); </code></li>
<li><code>                } </code></li>
<li><code>                catch(e) </code></li>
<li><code>                { </code></li>
<li><code>                    this.req = null; </code></li>
<li><code>                } </code></li>
<li><code>            } </code></li>
<li><code>            if(this.req != null) </code></li>
<li><code>            { </code></li>
<li><code>                this.req.onreadystatechange = this.response; </code></li>
<li><code>            } </code></li>
<li><code>        }, </code></li>
<li><code>    load : function(u,m,a) </code></li>
<li><code>        { </code></li>
<li><code>            this.url = u; </code></li>
<li><code>            this.method = m || this.method; </code></li>
<li><code>            this.async = a || this.async; </code></li>
<li><code>            if(this.req != null) </code></li>
<li><code>            { </code></li>
<li><code>                this.req.open(this.method,this.url,this.async); </code></li>
<li><code>                this.req.send(); </code></li>
<li><code>            } </code></li>
<li><code>        }, </code></li>
<li><code>    response : function() </code></li>
<li><code>        { </code></li>
<li><code>            var a = ajax.req; </code></li>
<li><code>            if(a.readyState == 4) </code></li>
<li><code>            { </code></li>
<li><code>                if(a.status==0 || a.status==200 || a.statusText=='OK') </code></li>
<li><code>                { </code></li>
<li><code>                    ajax.responseXML = a.responseXML; </code></li>
<li><code>                    ajax.responseText = a.responseText; </code></li>
<li><code>                    ajax.callback(); </code></li>
<li><code>                } </code></li>
<li><code>            } </code></li>
<li><code>        }, </code></li>
<li><code>    callback : function(){} </code></li>
<li><code>};</code></li>
</ol>
<p>Ich habe mich bei der Erstellung der Klasse für Literal-Objekt entschieden, da ich die Verwendbarkeit dadurch als sehr einfach empfinde und das Instanzieren des Objektes entfällt.</p>
<h4>Eigenschaften der Klasse</h4>
<ul>
<li><strong>req</strong><br />
Hier wird später das XMLHttpRequest-Objekt abgespeichert, welches ja für den Verbindungsaufbau zu Datenquellen nötig ist.</li>
<li><strong>url</strong><br />
Um später die URL auch in einem regelmäßigen Verfahren immer wieder abzurufen, wird sie in dieser Eigenschaft abgespeichert.</li>
<li><strong>method</strong><br />
Auch wird für weitere Verwendung die Übertragungsmethode als Eigenschaft festgehalten. Mögliche sinnvolle Werte sind in diesem Fall HEAD, PUT und GET, wobei letzteres der Defaultwert ist.</li>
<li><strong>async</strong><br />
Um eine synchrone Übertragen der Daten ein zustellen, setzt man diese Eigenschaft auf true.</li>
<li><strong>responseXML</strong> und <strong>responseText</strong><br />
In diesen beiden Eigenschaften wird nach erfolgreicher Übertragung der Daten die Ergebnis gespeichert. Einmal als normale Zeichenkette und einmal als ein XML-Objekt.</li>
</ul>
<h4>Methoden der Klasse</h4>
<ul>
<li><strong>init()</strong><br />
Diese Methode sollte immer vor allen anderen Methodenaufrufen benutzt werden, da sie das XMLHttpREquest instanziert und gleichzeitig wird festgelegt, dass die response()-Methode beim Statuswechsel aufgerufen werden soll.</li>
<li><strong>load(u,m,a)</strong><br />
Durch die 3 übergebenen Parameter wird als erstes die URL der Datenquelle, die Übertragungsmethode und synchrone oder asynchrone Art festgelegen. Dann wird die Datenquelle geladen.</li>
<li><strong>response()</strong><br />
In dieser Methode wird der Status der Übertragung und der Status des Übertragenen überprüft. Im Erfolgsfall werden die übertragenen Daten in die entsprechenen Eigenschaften übertragen und die callback()-Methode aufgerufen.</li>
<li><strong>callback()</strong><br />
Dieser Hock dient zur flexiblen Benutzung der Klassen. Mit dem Überschreiben der leeren Funktion bestimmt man extern was mit dem Daten nach dem Laden geschehen soll.</li>
</ul>
<h4>Download der Dateien</h4>
<ul>
<li><a href="http://www.er-design.de/Downloads/AJAX-Klasse/ajax.js">AJAX-Klasse</a></li>
<li><a href="http://www.er-design.de/Downloads/AJAX-Klasse/ajax.html">HTML-Datei </a></li>
<li><a href="http://www.er-design.de/Downloads/AJAX-Klasse/ajax-klasse.zip">Kompletes Beispiel als ZIP-Datei</a></li>
</ul>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2007/12/12/dynamische-linkliste-bringt-mehr-usability/" title="dynamische Linkliste bringt mehr Usability">dynamische Linkliste bringt mehr Usability</a></li><li><a href="http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/" title="AJAX Abressbuch &#8211; Tutorial Teil 3">AJAX Abressbuch &#8211; Tutorial Teil 3</a></li><li><a href="http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/" title="AJAX Adressbuch &#8211; Tutorial Teil 2">AJAX Adressbuch &#8211; Tutorial Teil 2</a></li><li><a href="http://www.re-design.de/2008/12/13/ajax-php-schulung-in-stuttgart/" title="AJAX &ndash; PHP Schulung in Stuttgart">AJAX &ndash; PHP Schulung in Stuttgart</a></li><li><a href="http://www.re-design.de/2008/01/29/ajax-adressbuch/" title="AJAX Adressbuch">AJAX Adressbuch</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2007/12/15/ajax-klasse-einfach-gebaut/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

