<?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>PHP Log &#187; AJAX</title>
	<atom:link href="http://www.php-log.de/tags/ajax/feed" rel="self" type="application/rss+xml" />
	<link>http://www.php-log.de</link>
	<description>Eine feine Sammlung nützlicher PHP Notizen</description>
	<lastBuildDate>Thu, 27 May 2010 04:43:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Internet Explorer 8 macht Ajax Probleme</title>
		<link>http://www.php-log.de/446/allgemeines/internet-explorer-8-macht-ajax-probleme</link>
		<comments>http://www.php-log.de/446/allgemeines/internet-explorer-8-macht-ajax-probleme#comments</comments>
		<pubDate>Sat, 29 Aug 2009 02:36:34 +0000</pubDate>
		<dc:creator>ralle</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[AJAX]]></category>

		<guid isPermaLink="false">http://www.php-log.de/?p=446</guid>
		<description><![CDATA[Auf einer Anwendung, die auf einem IIS läuft und CakePHP als Framework nutzt, weigert sich der IE 8 Änderungen via Ajax zu speichern. Und warum? Na wegen dem Cache, wenn der Browserverlauf auf &#8216;Automatisch&#8217; steht fragt diese Krücke gar nicht beim Server nach. Ich wusste mir aufgrund gebotener Eile, nicht anders zu Helfen, als meine [...]]]></description>
			<content:encoded><![CDATA[<p>Auf einer Anwendung, die auf einem IIS läuft und CakePHP als Framework nutzt, weigert sich der IE 8 Änderungen via Ajax zu speichern. Und warum? Na wegen dem Cache, wenn der Browserverlauf auf &#8216;Automatisch&#8217; steht fragt diese Krücke gar nicht beim Server nach.<span id="more-446"></span></p>
<p>Ich wusste mir aufgrund gebotener Eile, nicht anders zu Helfen, als meine Ajax Request um einen Timestamp zu erweitern.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">	<span style="color: #003366; font-weight: bold;">function</span> getTimeStamp<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;">var</span> t <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003366; font-weight: bold;">var</span> ms <span style="color: #339933;">=</span> t.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #3366CC;">'/t:'</span> <span style="color: #339933;">+</span> ms<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Nicht besonders elegant aber es hat geholfen. Kein Wunder wenn der Browser sich seine Vormachtsstellung verspielt. <a href="http://getclicky.com/global-marketshare-statistics" target="_blank">Bin gespannt wann der unter 50% geht <img src='http://www.php-log.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </a></p>
<p><strong>Update</strong></p>
<p>Hier eine Beispiel aus der Praxis:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">	<span style="color: #003366; font-weight: bold;">function</span> bulk_update<span style="color: #009900;">&#40;</span>operation<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #003366; font-weight: bold;">var</span> url <span style="color: #339933;">=</span> <span style="color: #3366CC;">'/admin/acls/operation/1'</span> <span style="color: #339933;">+</span> getTimeStamp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
		<span style="color: #003366; font-weight: bold;">new</span> Ajax.<span style="color: #660066;">Request</span><span style="color: #009900;">&#40;</span>url<span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
			method<span style="color: #339933;">:</span> <span style="color: #3366CC;">'get'</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: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #006600; font-style: italic;">// Tu was</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>transport<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                               <span style="color: #006600; font-style: italic;">// Fürs Protokoll</span>
			<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
			onLoading<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>transport<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #006600; font-style: italic;">// warte...</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
		<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>

]]></content:encoded>
			<wfw:commentRss>http://www.php-log.de/446/allgemeines/internet-explorer-8-macht-ajax-probleme/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Bilder Galerie mit Javascript</title>
		<link>http://www.php-log.de/287/allgemeines/bild-galerie-mit-javascript</link>
		<comments>http://www.php-log.de/287/allgemeines/bild-galerie-mit-javascript#comments</comments>
		<pubDate>Thu, 14 May 2009 08:52:48 +0000</pubDate>
		<dc:creator>ralle</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[AJAX]]></category>

		<guid isPermaLink="false">http://www.php-log.de/?p=287</guid>
		<description><![CDATA[Image-Galerien mit Javascript sind mittlerweile ziemlich populär und laufen den Flash-Gallerien den Rang ab. Hier eine kleine Auswahl von Galerien die ich einsetze, oder zumindest erwäge Sie mal auszuprobieren. Es handelt sich jeweils um reine Javascript Galerien die keinerlei serverseitige Scripte benötigen. Imago &#8211; An Ajax Image Gallery Basierend auf mootools liegt diese Galerie zur [...]]]></description>
			<content:encoded><![CDATA[<p>Image-Galerien mit Javascript sind mittlerweile ziemlich populär und laufen den Flash-Gallerien den Rang ab. Hier eine kleine Auswahl von Galerien die ich einsetze, oder zumindest erwäge Sie mal auszuprobieren. Es handelt sich jeweils um reine Javascript Galerien die keinerlei serverseitige Scripte benötigen.</p>
<p><span id="more-287"></span></p>
<h2><a href="http://imago.codeboje.de/" target="_blank">Imago &#8211; An Ajax Image Gallery</a></h2>
<p><img class="alignright size-medium wp-image-290" title="screenshot imago" src="http://www.php-log.de/wp-content/uploads/2009/05/screenshot_imago-300x160.png" alt="screenshot imago" width="300" height="160" /> Basierend auf mootools liegt diese Galerie zur Zeit in der Version 0.7 vor. Die Demo sieht ansprechend aus und funktioniert soweit ersichtleich einwandfrei. Die Anbindung ist ein wenig befremdlich, denn es wird per Ajax eine XML Datei in einem bestimmten Format geladen, was bei dynamischen Galerien immer ein wenig mehr Aufwand in der Implementierung bedeutet. Es gibt keine gängige Lizenz wie LGPL, sondern nur ein Terms of Use  Statement dass für einige Verwirrung sorgt. Eine Einschränkung ist z.B. dass die Galerie nicht mit Content Management Systemen vertrieben werden darf.</p>
<h2><a href="http://labs.adobe.com/technologies/spry/demos/gallery/index.html" target="_self">Spry &#8211; Gallery</a></h2>
<p><img class="alignright size-medium wp-image-295" title="Spry Gallery" src="http://www.php-log.de/wp-content/uploads/2009/05/spry-gallery-300x172.png" alt="Spry Gallery" width="300" height="172" /> Aus dem Hause Adobe kommt das umfangreiche &#8220;Spry framework for Ajax&#8221;, dessen Bildergalerie schon recht sexy ist. Auch diese Galerie arbeitet mit XML Dateien&#8230; bedauerlicherweise. Ob das XML auch als String übergeben werden kann, lässt sich so auf die Schnelle nicht herausfinden. Spry steht unter der BDS Lizenz und ist damit meiner Einschätzung nach für alle Einsatzzwecke geeignet.</p>
<h2><a href="http://www.lokeshdhakar.com/projects/lightbox2/" target="_blank">Lightbox 2</a></h2>
<p><img class="alignright size-medium wp-image-298" title="Lightbox 2" src="http://www.php-log.de/wp-content/uploads/2009/05/lightbox-2-300x134.png" alt="Lightbox 2" width="300" height="0" /> Der Klassiker. Einfachste Einbindung, Einfache Bedienung für den Benutzer, weitverbreitet und gut getestet. Eigentlich ideal, aber auch ein wenig ausgetreten. So ziemlich jeder hat dieses Gallery schon irgendwo mal gesehen. Lightbox 2 steht unter der <a href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution 2.5 License</a>, damit sollte auch diese Software überall ohne Probleme einsetzbar sein.</p>
<h2><a href="http://www.puidokas.com/portfolio/frogjs/" target="_blank">FrogJS Javascript Gallery</a></h2>
<p><img class="alignright size-medium wp-image-302" title="frogjs" src="http://www.php-log.de/wp-content/uploads/2009/05/frogjs-300x130.png" alt="frogjs" width="300" height="130" /> Eine recht erfrischende Variante ist die FrogJS Javascript Gallery. Wie bei der Lightbox, ist auch hier die Einbindung ein Kinderspiel und jeder Benutzer der jemals die Coverflow Funktion von z.B. iTunes gesehen hat kommt damit zurecht. Im  Hintergrund werkeln hier Prototype und Scriptacolous. Die Lizenz ist auch hier wieder die <a href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution 2.5 License</a>.</p>
<h2><a href="http://www.gcmingati.net/wordpress/wp-content/lab/jquery/imagestrip/imageslide-plugin.html" target="_blank">slideViewer </a></h2>
<p><img class="alignright size-medium wp-image-307" title="jquery-slideviewer-11" src="http://www.php-log.de/wp-content/uploads/2009/05/jquery-slideviewer-11-300x192.png" alt="jquery-slideviewer-11" width="300" height="192" /> Dieses feine jQuery Plugin bietet viel Effekt mit wenig Code. Sicherlich eine gute Wahl wenn es darum geht viele Bilder auf wenig Raum darzustellen. Die Einbindung schient hier ebenfalls sehr simpel zu sein. Der Slideeffekt lässt sich in verschiedenen Varianten einrichten. Leider konnte ich keine Lizenzhinweise finden, im Zweifel besser noch mal beim Author nachfragen.</p>
<h2><a title="JonDesign's (Javascript) SmoothGallery 2.0: Improved Mootools Mojo for Images" href="http://smoothgallery.jondesign.net/what/">JonDesign&#8217;s SmoothGallery</a></h2>
<p><img class="alignright size-medium wp-image-310" title="smoothgallery" src="http://www.php-log.de/wp-content/uploads/2009/05/smoothgallery-300x196.png" alt="smoothgallery" width="300" height="196" /> Diese Galerie wirkt sehr modern und gut gestylt. Nicht jede Funktion ist für den Benutzer gleich ersichtlich, aber meiner Meinung nach ist der Einsatz vertretbar.  Auch hier kommen die Mootools zum Einsatz. Die Einbinung ist nicht sooo einfach wie z.B. bei der Lightbox, aber es ist auch nicht so aufwändig, als dass es einen Programmierer abschrecken könnte. Einziger Wermutstropfen ist die Lizenz, die Galerie steht unter der <a href="http://www.fsf.org/licensing/licenses/gpl.html" target="_self">GPL</a> und ist damit nicht uneingeschränkt und für jeden Zweck einsetzbar.</p>
<h2><a href="http://imageflow.finnrudolph.de/" target="_blank">ImageFlow</a></h2>
<p><img class="alignright size-medium wp-image-313" title="imageflow" src="http://www.php-log.de/wp-content/uploads/2009/05/imageflow-300x161.png" alt="imageflow" width="300" height="161" /> Diese Gallery ist angelehnt an die Coverflow Funktion die ich von meinem MacBook kenne, Windows User kennen das wahrscheinlch am ehesten von iTunes. Die Einbindung sieht auf den ersten Blick recht einfach aus es gibt aber viele Möglichkeiten die Galerie anzupassen. Für die Reflektionen wird ein PHP Script genutzt, es kann aber auch ohne Reflektionen betrieben werden. Für die Integration in ein MVC Framework müssen minimale Anpassungen an den Pfaden vorgenommen werden. Die Lizenz ist die <a href="http://creativecommons.org/licenses/by-nc/3.0/">Creative Commons Attribution-Noncommercial 3.0 Unported License</a>, das heisst man muss für Kommerzielle Nutzung zahlen, aber damit habe ich kein Problem. Soweit ich das Überblicken kann ist der aktuelle Preis 20 USD.</p>
<h2><a href="http://jquery.com/demo/thickbox/" target="_blank">ThickBox <span>3.1</span></a></h2>
<p><img class="alignright size-medium wp-image-315" title="thickbox-31" src="http://www.php-log.de/wp-content/uploads/2009/05/thickbox-31-300x85.png" alt="thickbox-31" width="300" height="85" /> Basierend auf jQuery kommt ThickBox mit einer einfachen einzubinden API und bietet neben der Galerie gleich noch weitere nützliche Funktionen wie modale Dialoge und einiges mehr. Die Funktion der Gallery erinnert an die Lightbox, wirkt aber ein klein wenig moderner. Mit der <a href="http://www.opensource.org/licenses/mit-license.php" target="_blank">MIT License</a> gibt es meiner Ansicht nach keine Hürden für einen Einbindung.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.php-log.de/287/allgemeines/bild-galerie-mit-javascript/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Von CakePHP, Ajax Problemen und der Security Komponente</title>
		<link>http://www.php-log.de/128/php/von-cakephp-ajax-problemen-und-der-security-komponente</link>
		<comments>http://www.php-log.de/128/php/von-cakephp-ajax-problemen-und-der-security-komponente#comments</comments>
		<pubDate>Tue, 03 Feb 2009 23:52:00 +0000</pubDate>
		<dc:creator>ralle</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Mail]]></category>
		<category><![CDATA[PEAR]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.php-log.de/?p=128</guid>
		<description><![CDATA[Wer die &#8220;Security&#8221; Komponente von CakePHP in seinen Projekte einsetzt, kann bei der Ajax-Entwicklung die ein oder andere fröhliche, kleine Überraschung erleben. Und zwar in Form eines 404 Errors. Oder zu Deutsch: &#8220;Ajax geht nicht&#8221;. Warum nicht? Weil die Security Komponente verschlüsselte Daten (Security Tokens) in die Session schreibt die, im Falle eines Ajax Requests, [...]]]></description>
			<content:encoded><![CDATA[<p>Wer die &#8220;Security&#8221; Komponente von CakePHP in seinen Projekte einsetzt, kann bei der Ajax-Entwicklung die ein oder andere fröhliche, kleine Überraschung erleben. Und zwar in Form eines 404 Errors. Oder zu Deutsch: &#8220;Ajax geht nicht&#8221;. Warum nicht? Weil die Security Komponente verschlüsselte Daten (Security Tokens) in die Session schreibt die, im Falle eines Ajax Requests, nicht validiert werden können. Da steht sich CakePHP irgendwie selbst im Weg, vermutet böse Dinge und gibt deshalb lieber einen verwirrenden 404 Not found.<span id="more-128"></span></p>
<blockquote><p>Am Rande bemerkt: Der Einsatz des Firfox Addons <a href="https://addons.mozilla.org/de/firefox/addon/1843" target="_blank">Firebug</a> ist für die Entwicklung von Ajax dringend zu empfehlen.</p></blockquote>
<p>Zum Glück bietet CakePHP, wie es sich für ein gutes Framework gehört, auch hier eine beglückend einfache Lösung an. Den blackHoleCallback der Komponente Security. Dieser behandelt das Auftreten von Sicherheitsverstößen, ist in der Lage den 404er zu unterbinden und lässt das Framework weiterlaufen. Mein Lösung sieht so aus.</p>
<ol>
<li>blackHoleCallback im beforeFilter des AppController definieren.</li>
<li>In der Callback-Methode prüfen ob es eine genehme AJAX Methode betrifft.</li>
<li>Wenn &#8220;Ja&#8221;, einfach return. Sobald der Callback definiert wurde ist er für alles verantworlich, inkl. Terminerung des Scripts etc.</li>
<li>Wenn &#8220;Nein&#8221;, exit() und ggfl. Logging und/oder andere Maßnahmen.</li>
</ol>
<p>In Code gegossen sieht das so aus:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> AppController <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span>	
&nbsp;
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$components</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Security'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Session'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> is_allowed_ajax_request<span style="color: #009900;">&#40;</span><span style="color: #000088;">$error</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>		
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'controller'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;users&quot;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'action'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;auto_complete&quot;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'invalid request'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> beforeFilter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>		
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Security</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">blackHoleCallback</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;is_allowed_ajax_request&quot;</span><span style="color: #339933;">;</span>		
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.php-log.de/128/php/von-cakephp-ajax-problemen-und-der-security-komponente/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
