<?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>Neysors BLOG! &#187; JavaScript</title>
	<atom:link href="http://blog.neysor.net/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.neysor.net</link>
	<description></description>
	<lastBuildDate>Fri, 05 Feb 2010 09:14:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Vorladen von Bildern mit Statusanzeige</title>
		<link>http://blog.neysor.net/2009/09/05/vorladen-von-bildern-mit-statusanzeige/</link>
		<comments>http://blog.neysor.net/2009/09/05/vorladen-von-bildern-mit-statusanzeige/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 22:26:23 +0000</pubDate>
		<dc:creator>Neysor</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[preload Images]]></category>
		<category><![CDATA[vorladen von Bildern]]></category>

		<guid isPermaLink="false">http://blog.neysor.net/?p=154</guid>
		<description><![CDATA[Es gibt bereits sehr viele Scripte die Bilder vorladen mit oder ohne Statusanzeige.
Allerdings sind mir diese oft zu groß oder gewesen oder haben nur alle Bilder geladen die bereits über einen &#60;img&#62; Tag in der Homepage waren. Ich brauchte aber ein sehr kleines Script, da es auf mobilen Endgeräten ausgeführt werden sollte. Und es sollte [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt bereits sehr viele Scripte die Bilder vorladen mit oder ohne Statusanzeige.</p>
<p>Allerdings sind mir diese oft zu groß oder gewesen oder haben nur alle Bilder geladen die bereits über einen &lt;img&gt; Tag in der Homepage waren. Ich brauchte aber ein sehr <strong>kleines Script</strong>, da es auf <strong>mobilen Endgeräten ausgeführt werden sollte</strong>. Und es sollte nicht automatisch alle Bilder laden sondern <strong>erst auf Knopfdruck.</strong></p>
<p>Leider habe ich dann nichts mehr passendes gefunden, deshalb habe ich mir folgende Funktionen selber geschrieben.</p>
<p>Das preloading wird erst ausgelöst wenn man die Funktion <em>startPreloading()</em> aufgerufen wird. Dann wird der Browser durch das erzeugen eines neuen Bilders und dem <strong>zuweisen einer URL dazu veranlasst dieses Bild zu laden.</strong> (Eigentlich erst durch das zuweisen der URL)</p>
<p>Über das <a href="http://de.selfhtml.org/javascript/objekte/images.htm#complete">Attribut &#8220;complete&#8221;</a> kann nun überprüft werden ob das Laden beendet ist. Ein counter zählt die fertigen durch. Sind alle fertig geladen, dann wird die Funktion <em>doSomething()</em> aufgerufen. <strong>Wichtig dabei ist, dass man die 250ms pause beibehält. Denn wenn man keine Pause einbaut, erzeugt man ein Script, welches den Browser blockiert bis es fertig ist!</strong></p>
<pre class="brush: jscript;">
//Liste der Bilder
var global_imageList = new Array(&quot;bild1.jpg&quot;,&quot;bild2.jpg&quot;,&quot;bild3.jpg&quot;);
//Funktion die das Preloading startet
function startPreloading(){
	//Statusmeldung aktualisieren
	document.getElementById(&quot;status&quot;).innerHTML = &quot;Lade Bilder für Animation...&quot;;
	pictures = new Array();
	if(global_imageList != null &amp;&amp; global_imageList.length &gt; 0){
		//Jedes Bild laden
		for(i=0;i&lt;global_imageList.length;i++){
			tmp_img = new Image();
			tmp_img.src = url;
			pictures[i] = tmp_img;
		}
	}
	//Funktion zum kontrolieren aufrufen
	preloading(pictures);
}

function preloading(pictures){
	counter = 0;
	for(i=0;i&lt;pictures.length;i++){
		if(pictures[i].complete){
			counter++;
		}
	}
	//Wenn alle Bilder geladen sind
	if(counter == pictures.length){
		//Jetzt sind alle Bilder geladen, also:
		doSomething();
	//Sonst status
	} else {
		document.getElementById(&quot;status&quot;).innerHTML = &quot;Lade Bilder für Animation... (&quot;+counter+&quot;/&quot;+pictures.length+&quot;)&quot;;
		//Eine Pause einlegen, sonst bleibt das Script hängen
		setTimeout(function(){preloading(pictures);},250);
	}
}
</pre>
<p>Das Script ist nun auch einfach anzupassen. Man muss nur die global_Imagelist mit seinen Bildern einfügen. Die Statusanzeige Passiert als text, indem der &lt;div&gt; Block mit dem Namen &#8220;Status&#8221; verändert wird.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.neysor.net/2009/09/05/vorladen-von-bildern-mit-statusanzeige/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX light &#8211; Kleine Abfragen ohne großes Framework</title>
		<link>http://blog.neysor.net/2009/05/22/ajax-light-kleine-abfragen-ohne-groses-framework/</link>
		<comments>http://blog.neysor.net/2009/05/22/ajax-light-kleine-abfragen-ohne-groses-framework/#comments</comments>
		<pubDate>Fri, 22 May 2009 18:37:57 +0000</pubDate>
		<dc:creator>Neysor</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Quick and Dirty]]></category>

		<guid isPermaLink="false">http://blog.neysor.net/?p=106</guid>
		<description><![CDATA[AJAX ist eine nette Sache! Dieses Akronym steht für „Asynchronous JavaScript and XML“ und ermöglicht unter anderem dynamisches Nachladen von Inhalten in die HTML Seite. Wer sich ganz genau dafür interessiert, kann ja auf WIKIPEDIA nachschauen  
Natürlich findet man jetzt eine große Menge an Bibliotheken die man nutzen kann und sollte, aber hier möchte [...]]]></description>
			<content:encoded><![CDATA[<p>AJAX ist eine nette Sache! Dieses Akronym steht für „Asynchronous JavaScript and XML“ und ermöglicht unter anderem dynamisches Nachladen von Inhalten in die HTML Seite. Wer sich ganz genau dafür interessiert, kann ja auf <a title="AJAX auf Wikipedia" href="http://de.wikipedia.org/wiki/AJAX" target="_blank">WIKIPEDIA</a> nachschauen <img src='http://blog.neysor.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Natürlich findet man jetzt eine große Menge an Bibliotheken die man nutzen kann und sollte, aber hier möchte ich euch eine <a title="Quick and Dirty" href="http://en.wikipedia.org/wiki/Quick-and-dirty" target="_blank">Quick and Dirty</a> Lösung zeigen.</p>
<pre class="brush: jscript;">
//AJAX Initialisieren und Funktionen zur Handhabung
var request = false;

// Request senden
function setRequest(url,send,irfunction) {
	// Request erzeugen
	if (window.XMLHttpRequest) {
		request = new XMLHttpRequest(); // Mozilla, Safari, Opera
	} else if (window.ActiveXObject) {
		try {
			request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
		} catch (e) {
			try {
				request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
			} catch (e) {}
		}
	}
		// überprüfen, ob Request erzeugt wurde
	if (!request) {
		alert(&quot;Kann keine XMLHTTP-Instanz erzeugen&quot;);
		return false;
	} else {
		// Request öffnen
		request.open('post', url, true);
		// Requestheader senden
		request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
		// Request senden
		request.send(send);
		// Request auswerten
		request.onreadystatechange = function() {
			interpretRequest(irfunction);
		}
	}
}
// Request auswerten
function interpretRequest(irfunction) {
	switch (request.readyState) {
		// wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
		case 4:
			if (request.status != 200) {
				alert(&quot;Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:&quot;+request.status);
			} else {
				irfunction();
			}
			break;
		default:
			break;
	}
}
//ENDE AJAX Funktionen
</pre>
<p>Wie verwendet man diese Funktionen nun richtig?</p>
<p>Angenommen wir haben eine Formular bei dem sich ein User registrieren muss und wir wollen checken ob der Nick schon vorhanden ist.</p>
<p>Dazu verwenden wir eine PHP Datei, die auf im selben Ordner liegt und abfrage.php heißt. Diese macht uns eine MYSQL Abfrage und liefert uns dann false zurück, wenn der Nickname schon vorhanden ist. Die 2 JavaScript Funktionen die wir zusätzlich noch in der HTML Datei brauchen sind folgende:</p>
<pre class="brush: jscript;">
function check_name(nick) {
	//Request abschicken mit Post Variable Nickname
	setRequest(&quot;/abfrage.php&quot;,&quot;nickname=&quot;+nick,check_name_finish);
}
function check_name_finish() {
	var content = request.responseText;
	//Do something
}
</pre>
<p>Die Funktion <em>check_name(nick)</em> <strong>wird vom Inputfeld aufgerufen</strong>, wenn dieses nicht mehr beschrieben wird.  (siehe Code vom Inputfeld). Ist Funktion <em>check_name(nick)</em> <strong>mit der Ausführung fertig</strong>, wird Funktion <em>check_name_finish()</em> <strong>aufgerufen und ausgeführt</strong>. Diese hat nun in der Variable <strong>content</strong> die Antwort der Abfrage und kann nun darauf reagieren.</p>
<p>Und das Inputfeld würde so aussehen:</p>
<pre class="brush: xml; light: true;">
&lt;input type=&quot;text&quot; name=&quot;nickname&quot; value=&quot;&quot; onblur=&quot;check_name(this.value)&quot;&gt;
</pre>
<p>Wie bereits erwähnt ist das hier nur Quick and Dirty! Getestet habe ich es mit den neuesten Versionen von IE und FireFox. Viel Spass damit!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.neysor.net/2009/05/22/ajax-light-kleine-abfragen-ohne-groses-framework/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
