<?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>Alexander Stelter - foo, bar, baz &#187; ajax</title>
	<atom:link href="http://www.alexander-stelter.de/blog/tag/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alexander-stelter.de/blog</link>
	<description>PHP, Javascript, Doctrine, Internet, Bücher, Real-Life</description>
	<lastBuildDate>Sun, 25 Jul 2010 11:27:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>YUI statt json.js</title>
		<link>http://www.alexander-stelter.de/blog/199-yui-statt-json-js/</link>
		<comments>http://www.alexander-stelter.de/blog/199-yui-statt-json-js/#comments</comments>
		<pubDate>Thu, 15 May 2008 08:48:00 +0000</pubDate>
		<dc:creator>Alexander</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[active-x]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[yahoo]]></category>
		<category><![CDATA[yui]]></category>

		<guid isPermaLink="false">http://www.alexander-stelter.de/blog/?p=199</guid>
		<description><![CDATA[Wie ich vor einer Weile berichtete, kann man mit JSON eine Menge anstellen. Was mich immer ein wenig geärgert hat, wenn wir JSON und YUI gemeinsam eingesetzt haben, dass es keine integrierte Lösung gab. Man mußte immer die YUI API laden und zusätzlich die json.js. Dies ist nun seit der Version 2.5.0 vorbei, denn YUI [...]]]></description>
			<content:encoded><![CDATA[<p>Wie ich vor einer Weile <a href="http://www.alexander-stelter.de/blog/archives/9-JavaScript-Object-Notation-JSON.html" >berichtete</a>, kann man mit <a href="http://www.json.org/" >JSON</a> eine Menge anstellen. Was mich immer ein wenig geärgert hat, wenn wir JSON und <a href="http://developer.yahoo.com/yui/" >YUI</a> gemeinsam eingesetzt haben, dass es keine integrierte Lösung gab. Man mußte immer die YUI API laden und zusätzlich die json.js. Dies ist nun seit der Version 2.5.0 vorbei, denn YUI integriert die JSON API in deren eigenen Code und stellt einen Wrapper zur Verfügung.</p>
<p>Mit folgenden Code-Schnipseln kann man einen JSON-String in ein Array umwandeln:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">try</span>
<span style="color: #009900;">&#123;</span> 
<span style="color: #003366; font-weight: bold;">var</span> prod <span style="color: #339933;">=</span> YAHOO.<span style="color: #660066;">lang</span>.<span style="color: #660066;">JSON</span>.<span style="color: #660066;">parse</span><span style="color: #009900;">&#40;</span>jsonString<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Invalid product data&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Ebenfalls ist es möglich aus einem Array einen JSON String umzuwandeln. Das Beispiel findet sich im <a href="http://developer.yahoo.com/yui/json/" >JSON Manual</a> der YUI Seite. Wer YUI und JSON gemeinsam verwendet, kann sich nun getrost zurücklehnen und alles aus einem Guß verwenden <img src='http://www.alexander-stelter.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p align="left"><a target="_blank" class="tt" href="http://twitter.com/home/?status=YUI+statt+json.js+http://bit.ly/9u6O0R" title="Post to Twitter"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" class="tt" href="http://delicious.com/post?url=http://www.alexander-stelter.de/blog/199-yui-statt-json-js/&amp;title=YUI+statt+json.js" title="Post to Delicious"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-delicious-micro3.png" alt="Post to Delicious" /></a> <a target="_blank" class="tt" href="http://digg.com/submit?url=http://www.alexander-stelter.de/blog/199-yui-statt-json-js/&amp;title=YUI+statt+json.js" title="Post to Digg"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-digg-micro3.png" alt="Post to Digg" /></a> <a target="_blank" class="tt" href="http://www.facebook.com/share.php?u=http://www.alexander-stelter.de/blog/199-yui-statt-json-js/&amp;t=YUI+statt+json.js" title="Post to Facebook"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-facebook-micro3.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.alexander-stelter.de/blog/199-yui-statt-json-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neue YUI Version 2.5.0</title>
		<link>http://www.alexander-stelter.de/blog/157-neue-yui-version-2-5-0/</link>
		<comments>http://www.alexander-stelter.de/blog/157-neue-yui-version-2-5-0/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 20:11:39 +0000</pubDate>
		<dc:creator>Alexander</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[golem]]></category>
		<category><![CDATA[yui]]></category>

		<guid isPermaLink="false">http://www.alexander-stelter.de/blog/?p=157</guid>
		<description><![CDATA[Wie heute bei Golem zu lesen war, wurde heute die neue Version der YAHOO User Interface Library (YUI) veröffentlicht. Die mitlerweile sehr gewachsene Komponentensammlung unterstützt nun auch endlich einen Multiuploader, mit dem man mehrere Dateien in einem Prozess hochladen kann. Dies geschieht mit einer ähnlichen Technik wie bei SWF Upload.
Wer viel und komplex mit Javascript [...]]]></description>
			<content:encoded><![CDATA[<p>Wie heute bei <a href="http://www.golem.de/0802/57854.html" >Golem</a> zu lesen war, wurde heute die neue Version der YAHOO User Interface Library (<a href="http://developer.yahoo.com/yui/" >YUI</a>) veröffentlicht. Die mitlerweile sehr gewachsene Komponentensammlung unterstützt nun auch endlich einen Multiuploader, mit dem man mehrere Dateien in einem Prozess hochladen kann. Dies geschieht mit einer ähnlichen Technik wie bei <a href="http://swfupload.org/" >SWF Upload</a>.<br />
Wer viel und komplex mit Javascript entwickeln muss findet mit YUI eine gute Sammlung an Komponenten, die das Leben doch schon sehr erleichtern und viel Arbeit abnehmen. Eine komplexe Anwendung als Beispiel der Praxistauglichkeit von YUI kann man <a href="http://developer.yahoo.com/yui/examples/layout/adv_layout_source.html" >hier</a> bewundern. Besonders herrauszuheben sind die Connection-, Dom- und Event-Komponente, mit der sich in wenigen Schritten eigene Ajax-Anwendungen stricken lassen.<br />
Einziges Manko bei YUI ist für mich die doch sehr komplexe Code-Struktur, die ziemlich große Javascript-Files zur Folge hat. Allerdings &#8220;erkauft&#8221; man sich damit eine hohes Maß an Flexibilität bei der Entwicklung von Javascript-Applikationen.</p>
<p align="left"><a target="_blank" class="tt" href="http://twitter.com/home/?status=Neue+YUI+Version+2.5.0+http://bit.ly/93esLD" title="Post to Twitter"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" class="tt" href="http://delicious.com/post?url=http://www.alexander-stelter.de/blog/157-neue-yui-version-2-5-0/&amp;title=Neue+YUI+Version+2.5.0" title="Post to Delicious"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-delicious-micro3.png" alt="Post to Delicious" /></a> <a target="_blank" class="tt" href="http://digg.com/submit?url=http://www.alexander-stelter.de/blog/157-neue-yui-version-2-5-0/&amp;title=Neue+YUI+Version+2.5.0" title="Post to Digg"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-digg-micro3.png" alt="Post to Digg" /></a> <a target="_blank" class="tt" href="http://www.facebook.com/share.php?u=http://www.alexander-stelter.de/blog/157-neue-yui-version-2-5-0/&amp;t=Neue+YUI+Version+2.5.0" title="Post to Facebook"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-facebook-micro3.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.alexander-stelter.de/blog/157-neue-yui-version-2-5-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Entwicklung mit Prototype</title>
		<link>http://www.alexander-stelter.de/blog/18-javascript-entwicklung-mit-prototype/</link>
		<comments>http://www.alexander-stelter.de/blog/18-javascript-entwicklung-mit-prototype/#comments</comments>
		<pubDate>Wed, 07 Mar 2007 19:26:15 +0000</pubDate>
		<dc:creator>Alexander</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://www.alexander-stelter.de/blog/?p=18</guid>
		<description><![CDATA[Heute möchte ich ein interessantes Framework vorstellen, welches die Entwicklung mit JavaScript extrem vereinfacht und dem Entwickler (größtenteils Cross-Browser) viele Dinge vereinfacht. Hierbei handelt es sich um Prototype. Entstanden ist es ursprünglich aus dem Framework Ruby on Rails.
Als Beispiel nehmen wir ein Formular, welches eine Anfrage via AJAX an den Server schickt und die Antwort [...]]]></description>
			<content:encoded><![CDATA[<p>Heute möchte ich ein interessantes Framework vorstellen, welches die Entwicklung mit JavaScript extrem vereinfacht und dem Entwickler (größtenteils <strong>Cross-Browser</strong>) viele Dinge vereinfacht. Hierbei handelt es sich um <strong><a title="prototype" href="http://www.prototypejs.org">Prototype</a></strong>. Entstanden ist es ursprünglich aus dem Framework <a title="Ruby on Rails" href="http://www.rubyonrails.org/">Ruby on Rails</a>.</p>
<p>Als Beispiel nehmen wir ein Formular, welches eine Anfrage via <a title="AJAX" href="http://de.wikipedia.org/wiki/Ajax_%28Programmierung%29">AJAX</a> an den Server schickt und die Antwort des Servers wieder in das Script zurückholt. Hierzu verwenden wir die eingebettete <a title="JSON" href="http://www.alexander-stelter.de/blog/archives/9-JavaScript-Object-Notation-JSON.html">JSON</a>-Funktionalität. Hierbei sei zu beachten, dass Prototype auf einem JSON-Objekt auch nur mit <em>eval()</em> operiert. Hier besteht also bei Produktivanwendungen noch Prüfungsbedarf. Mit Prototype kann man auf jeden Fall vor der Ausgabe Script-, HTML-Tags etc. entfernen lassen, wenn man das möchte. Das schützt allerdings nicht vor dem Angriff durch JavaScript, welches sich in der Response des Servers befindet und direkt ausgeführt werden könnte.<span id="more-18"></span><br />
JSON kann bei Prototype via Header und &#8220;normaler&#8221; Übergabe übertragen werden. Bei der Übergabe per Header muss der X-JSON-Header gesendet werden. Bei größeren Datenmengen empfielt sich jedoch wieder das <em>echo</em>. Dies wird von Prototype erkannt, wenn der Content-Type <em>text/javascript</em> ist. Ich stelle hier die Lösung mit X-JSON-Header vor. Wichtig ist hier wieder, dass die JSON-Extention[3] für PHP installiert ist, bzw. eincompiliert[2] ist.</p>
<p>Beginnen wir also mit dem AJAX-Beispiel. Vorrausgesetzt ist hier, dass die Datei <em>prototype.js</em> korrekt im Header der HTML-Seite eingebunden ist, ich denke das muss ich nicht erklären <img src='http://www.alexander-stelter.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Für die eigenen Funktion verwende ich eine weitere JavaScript-Datei <em>article-prototype.js</em>. Falls das doch jemandem nicht ganz klar sein sollte, verweise ich jetzt mal frech auf selfhtml[4]. Ich verwende hier auch Inline-JavaScript, was ich eigentlich mittels Behaviours verstecken würde, aber das wird evtl. Thema eines neuen Artikels sein <img src='http://www.alexander-stelter.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>Zunächst basteln wir uns eine HTML-Seite, die eine FORM enthält, in der man mittels einer Selectbox einen oder alle Datensätze wählen kann:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;h2&gt;Daten wählen&lt;/h2&gt;
&nbsp;
&lt;form action=&quot;#&quot; method=&quot;post&quot;&gt;
	&lt;label for=&quot;datensatz&quot;&gt;Datensätze ausgeben&lt;/label&gt;
&lt;select id=&quot;datensatz&quot; name=&quot;datensatz&quot;&gt;
		&lt;option value=&quot;0&quot;&gt;Alle Datensätze&lt;/option&gt;
		&lt;option value=&quot;1&quot;&gt;Datensatz 1&lt;/option&gt;
		&lt;option value=&quot;2&quot;&gt;Datensatz 2&lt;/option&gt;
		&lt;option value=&quot;3&quot;&gt;Datensatz 3&lt;/option&gt;
		&lt;option value=&quot;4&quot;&gt;Datensatz 4&lt;/option&gt;
		&lt;option value=&quot;5&quot;&gt;Datensatz 5&lt;/option&gt;
	&lt;/select&gt;
&lt;input onclick=&quot;RequestData();&quot; type=&quot;button&quot; value=&quot;Daten abholen&quot; /&gt;
&lt;/form&gt;
&nbsp;
&lt;h2&gt;Ausgabe&lt;/h2&gt;
&nbsp;
&nbsp;
&lt;div id=&quot;output&quot;&gt;Keine Daten ausgewählt&lt;/div&gt;</pre></div></div>

<p>Jetzt legen wir eine Funktion an, die unseren AJAX-Aufruf beherbergt:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> RequestData <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   <span style="color: #003366; font-weight: bold;">new</span> Ajax.<span style="color: #660066;">Request</span>
   <span style="color: #009900;">&#40;</span>
      <span style="color: #3366CC;">'/test/prototype-server.php'</span><span style="color: #339933;">,</span>
	<span style="color: #009900;">&#123;</span>
	   method<span style="color: #339933;">:</span><span style="color: #3366CC;">'post'</span><span style="color: #339933;">,</span>
	   parameters<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span> datensatz<span style="color: #339933;">:</span> parseInt<span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'datensatz'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
	   onSuccess<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>transport<span style="color: #339933;">,</span> json<span style="color: #009900;">&#41;</span>
	   <span style="color: #009900;">&#123;</span>
		handleSuccess<span style="color: #009900;">&#40;</span>json<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	   <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		onFailure<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			handleFailure<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Wir haben jetzt eine Funktion, die ein AJAX-Objekt angelegt und die Methode POST verwendet, implementiert. Über <em>parameters:</em> kann man die einzelnen Parameter angeben, die man an den Request übergeben will. Hier verwende ich die von Prototype implementierte Kuzform für <em>document.getElementById(&#8216;datensatz&#8217;)</em> (<em>$(&#8216;id-name&#8217;)</em>). Möchte man eine komplette Form übergeben, bietet Prototype eine Serialisierung der Daten:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'id_of_form_element'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">serialize</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>Als nächstes definieren wir die vorgegebenen Funktionen <em>onSuccess</em> und <em>onFailure</em>. Verwendet man JSON, werden zwei Variablen an onSuccess übergeben, die zweite enthält dann die Response-Daten als JSON-Objekt. Die Bedeutung der Funktionen sollte selbsterklärend sein. Der Übersicht halber machen diese Funktionen nichts anderes, als eine  andere Funktion aufzurufen. Die Fehler-Funktion ist hier recht unspektakulär und wird nur aufgerufen, wenn ein Timeout beim Request eintritt:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> handleFailure <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Ein Problem ist aufgetreten, die Daten konnten nicht abgeholt werden'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Jetzt geben wir einfach die abgeholten Daten aus. Hierzu leeren wir zunächst den Content-Container. Danach laufen wir mit einer Schleife durch das Result:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> handleSuccess <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>response<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'output'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> response.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'output'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">+=</span> i<span style="color: #339933;">+</span><span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'output'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">+=</span> <span style="color: #3366CC;">' =&amp;gt; '</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'output'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">+=</span> response<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'output'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">+=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Danach können wir unsere Ausgabe bestaunen <img src='http://www.alexander-stelter.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Der Server dazu sieht übrigens so aus:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$AryData</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayObject <span style="color: #009900;">&#40;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'PHP'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'Perl'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Python'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'C++'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'C#'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'datensatz'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$Output</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$AryData</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$Output</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$AryData</span> <span style="color: #009900;">&#91;</span> <span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'datensatz'</span><span style="color: #009900;">&#93;</span> – <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'X-JSON: '</span><span style="color: #339933;">.</span><span style="color: #990000;">json_encode</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$Output</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Das Ganze ist beliebig erweiterbar und auf jeden Fall recht mächtig. Prototype nimmt einem an vielen Stellen eine Menge Arbeit ab und es läuft großteils auch alles in fast allen gängigen Browsern <img src='http://www.alexander-stelter.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Das war natürlich nur ein Feature von vielen, die Prototype bietet, mehr findet man auch auf der Webseite[1].</p>
<p>Bei Fragen, Problemen etc. einfach einen Kommentar hinterlassen <img src='http://www.alexander-stelter.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Die Sourcen versende ich auf Anfrage. Interessenten können auch gerne einen Kommentar hinterlassen; ist vielleicht weniger Arbeit, als alles hier rauszukopieren.</p>
<p><strong>Links</strong><br />
[1] <a title="http://www.prototypejs.org" href="http://www.prototypejs.org">http://www.prototypejs.org</a><br />
[2] <a title="http://de.php.net/json" href="http://de.php.net/json">http://de.php.net/json</a><br />
[3] <a title="http://pecl.php.net/package/json" href="http://pecl.php.net/package/json">http://pecl.php.net/package/json</a><br />
[4] <a title="http://de.selfhtml.org" href="http://de.selfhtml.org">http://de.selfhtml.org</a></p>
<p align="left"><a target="_blank" class="tt" href="http://twitter.com/home/?status=JavaScript+Entwicklung+mit+Prototype+http://bit.ly/atrdVw" title="Post to Twitter"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" class="tt" href="http://delicious.com/post?url=http://www.alexander-stelter.de/blog/18-javascript-entwicklung-mit-prototype/&amp;title=JavaScript+Entwicklung+mit+Prototype" title="Post to Delicious"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-delicious-micro3.png" alt="Post to Delicious" /></a> <a target="_blank" class="tt" href="http://digg.com/submit?url=http://www.alexander-stelter.de/blog/18-javascript-entwicklung-mit-prototype/&amp;title=JavaScript+Entwicklung+mit+Prototype" title="Post to Digg"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-digg-micro3.png" alt="Post to Digg" /></a> <a target="_blank" class="tt" href="http://www.facebook.com/share.php?u=http://www.alexander-stelter.de/blog/18-javascript-entwicklung-mit-prototype/&amp;t=JavaScript+Entwicklung+mit+Prototype" title="Post to Facebook"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-facebook-micro3.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.alexander-stelter.de/blog/18-javascript-entwicklung-mit-prototype/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JavaScript Object Notation (JSON)</title>
		<link>http://www.alexander-stelter.de/blog/9-javascript-object-notation-json/</link>
		<comments>http://www.alexander-stelter.de/blog/9-javascript-object-notation-json/#comments</comments>
		<pubDate>Wed, 21 Feb 2007 19:09:00 +0000</pubDate>
		<dc:creator>Alexander</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[active-x]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[soap]]></category>

		<guid isPermaLink="false">http://www.alexander-stelter.de/blog/?p=9</guid>
		<description><![CDATA[Web 2.0 ist in aller Munde und dabei fällt auch meist im nächsten Satz das Wort AJAX. AJAX steht für Asynchronous JavaScript and XML. Bei dieser Technologie wird mittels eines HTTP-Requests per Active-X oder Javascript eine Seite oder ein Script aufgerufen und dessen Daten übertragen, ohne dass die Seite neu geladen werden muss. Mit AJAX [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://de.wikipedia.org/wiki/Web_2.0"  title="Web 2.0">Web 2.0</a> ist in aller Munde und dabei fällt auch meist im nächsten Satz das Wort <a href="http://de.wikipedia.org/wiki/Ajax_%28Programmierung%29"  title="AJAX">AJAX</a>. AJAX steht für Asynchronous JavaScript and XML. Bei dieser Technologie wird mittels eines HTTP-Requests per Active-X oder Javascript eine Seite oder ein Script aufgerufen und dessen Daten übertragen, ohne dass die Seite neu geladen werden muss. Mit AJAX kann man also eine Webanwendung stricken, die das Look an Feel einer Desktopanwendung hat. So kann man zum Beispiel eine Tabelle mit Daten dynamisch nach einer Spalte sortieren, ohne die Seite neu zu laden.<span id="more-9"></span><!-- s9ymdb:16 --><img width='450' height='434' style="border: 0px; padding-right: 5px;" src="/blog/uploads/programmierung/Ajax-vergleich.png" alt="" /></p>
<div class="serendipity_imageComment_txt">(Quelle: <a href="http://de.wikipedia.org" >de.wikipedia.org</a>)</div>
<p>Zur Übertragung der Daten gibt es einige Formate, die sich in der Praxis bewiesen haben. Hierzu gehören u.a. <a href="http://de.wikipedia.org/wiki/XML"  title="XML">XML</a>, <a href="http://de.wikipedia.org/wiki/ReStructuredText"  title="reST">reST</a>, <a href="http://de.wikipedia.org/wiki/JSON"  title="JSON">JSON</a> und <a href="http://de.wikipedia.org/wiki/SOAP"  title="SOAP">SOAP</a>.</p>
<p><strong>Was ist JSON?</strong><br />
JSON steht für JavaScript Object Notation. Hierbei wird auf Anforderung mit einem Algorithmus serverseitig aus einem Objekt (z.B. einem PHP-Array) ein JSON-Objekt serialisiert. JSON-Objekte haben den Vorteil gegenüber XML, dass sie wenige Bytes für die eigenen Strukturinformationen verwenden und somit wenig Overhead beim Übertragen von Daten erzeugt wird. Will man natürlich komplexe Datenstrukturen übertragen,  sollte man sich überlegen XML zu verwenden, denn hier sind die Methoden zum Zugriff auf die Baumstruktur der Daten ausgereift und verschwenden weniger Rechenleistung des Clients. Zum Übertragen von Arrays mit überschaubarer Verschachtelung ist JSON aber die richtige Wahl. </p>
<p>Bei der Wahl des Datenformats sollte man bedenken, dass auf Seiten des Clients zusätzlich Rechenleistung von Nöten ist, um die Daten zur Ausgabe aus dem Format zu extrahieren.</p>
<p><strong>Verarbeitung</strong><br />
Erhält man nun von Serverseite ein JSON-Objekt, hat man zwei Methoden zur Auswahl um aus diesem Objekt ein verwendbares Javascript-Objekt zu erzeugen:</p>
<p><strong>1. eval()</strong><br />
Mittels eval() kann man ein JSON-Objekt direkt ausführen und so zu einem benutzbaren Javascript-Objekt machen. Das hat den gewaltigen Nachteil, dass nicht vertrauenswürdige Daten ausgeführt würden könnten und somit auch schadhafter Code ausgeführt werden kann. Daher sollte man darauf verzichten.</p>
<p><strong>2. JSON-Parser</strong><br />
Ein JSON-Parser[1] bietet ebenso die Möglichkeit aus einem JSON-Objekt ein brauchbares Javascript-Objekt zu erzeugen. Hierbei kann man entscheiden, was man mit im JSON-Objekt vorhandenen Methoden vorgeht. Man kann sie umwandeln oder auch nicht. Der hier verwendete JSON-Parser überläd bei Einbindung alle Strings, Arrays etc. und ergänzt nötige Methoden für das umwandeln in ein Javascript-Objekt. Bei Bedarf können diese dann aufgerufen werden.</p>
<p><strong>Ein Beispiel:</strong><br />
Wir haben ein PHP-Array. Dieses wird dann mittels der in PHP 5.2 enthaltenen JSON-Bibliothek[2] codiert. Für Versionen < PHP 5.2 ist eine Extention in <a href="http://pecl.php.net"  title="PECL">PECL</a> vorhanden [3].</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$Data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span>
<span style="color: #009900;">&#40;</span>
	<span style="color: #990000;">array</span>
	<span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Stephan'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'ort'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Bonn'</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	<span style="color: #990000;">array</span>
	<span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Thomas'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'ort'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Köln'</span>
	<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #990000;">json_encode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$Data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Diese Daten werden nun via AJAX übertragen. In der Callback-Funktion des AJAX-Objekts haben wir dann folgende Code-Stelle:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> Data <span style="color: #339933;">=</span> response.<span style="color: #660066;">responseText</span>.<span style="color: #660066;">parseJSON</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Der Funktion parseJSON können auch noch zusätzliche Filter übergeben werden, mit denen man entscheiden kann, wie mit Methoden etc. umgegangen werden soll. Dies lassen wir hier mal außen vor. Jetzt können wir einzelne Daten hiervon ausgeben:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>Data<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Der JSON-Parser erkennt, dass es sich hierbei um ein Array handelt und wandelt es um. Es ist also recht einfach die Daten zurückzuwandeln.</p>
<p>So kann man einfach und schnell Daten von PHP nach Javascript übertragen und diese dort weiterverarbeiten ohne ein externes Framework einzubinden (welche natürlich auch ihre Vorteile haben). </p>
<p>Demnächst werde ich in einem eigenen Artikel auf AJAX mit <a href="http://www.prototypejs.org/"  title="Prototype">Prototype</a> eingehen, lasst Euch überraschen <img src='http://www.alexander-stelter.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p><strong>Links</strong><br />
[1] <a href="http://www.json.org/"  title="http://www.json.org/">http://www.json.org/</a><br />
[2] <a href="http://de.php.net/json"  title="http://de.php.net/json">http://de.php.net/json</a><br />
[3] <a href="http://pecl.php.net/package/json"  title="http://pecl.php.net/package/json">http://pecl.php.net/package/json</a></p>
<p align="left"><a target="_blank" class="tt" href="http://twitter.com/home/?status=JavaScript+Object+Notation+%28JSON%29+http://bit.ly/c0so75" title="Post to Twitter"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" class="tt" href="http://delicious.com/post?url=http://www.alexander-stelter.de/blog/9-javascript-object-notation-json/&amp;title=JavaScript+Object+Notation+%28JSON%29" title="Post to Delicious"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-delicious-micro3.png" alt="Post to Delicious" /></a> <a target="_blank" class="tt" href="http://digg.com/submit?url=http://www.alexander-stelter.de/blog/9-javascript-object-notation-json/&amp;title=JavaScript+Object+Notation+%28JSON%29" title="Post to Digg"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-digg-micro3.png" alt="Post to Digg" /></a> <a target="_blank" class="tt" href="http://www.facebook.com/share.php?u=http://www.alexander-stelter.de/blog/9-javascript-object-notation-json/&amp;t=JavaScript+Object+Notation+%28JSON%29" title="Post to Facebook"><img class="nothumb" src="http://www.alexander-stelter.de/blog/wp-content/plugins/tweet-this/icons/tt-facebook-micro3.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.alexander-stelter.de/blog/9-javascript-object-notation-json/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
