<?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>Coders Cult Web Development Blog &#187; Javascript/AJAX</title>
	<atom:link href="http://coderscult.com/category/javascript-ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://coderscult.com</link>
	<description>Website development - HTML/XHTML, CSS, Javascript/AJAX, PHP, MySQL</description>
	<lastBuildDate>Thu, 31 Dec 2009 12:58:08 +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>Javascript Sleep Function</title>
		<link>http://coderscult.com/javascript-ajax/2009/02/05/javascript-sleep-function/</link>
		<comments>http://coderscult.com/javascript-ajax/2009/02/05/javascript-sleep-function/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 09:36:38 +0000</pubDate>
		<dc:creator>Mike Lopez</dc:creator>
				<category><![CDATA[Javascript/AJAX]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[javascript sleep]]></category>
		<category><![CDATA[javascript sleep function]]></category>

		<guid isPermaLink="false">http://coderscult.com/?p=62</guid>
		<description><![CDATA[






I&#8217;ll make this short and quick.  I&#8217;ve been searching the web for a Javascript sleep function that works and came across this.  It was presented as a class but what I needed was just a function so I rewrote the code a bit.  Here&#8217;s the end result of my Javascript sleep function [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll make this short and quick.  I&#8217;ve been searching the web for a Javascript sleep function that works and came across this.  It was presented as a class but what I needed was just a function so I rewrote the code a bit.  Here&#8217;s the end result of my Javascript sleep function which I named, well, jsleep.<span id="more-62"></span></p>
<pre lang="javascript">
function jsleep(s){
	s=s*1000;
	var a=true;
	var n=new Date();
	var w;
	var sMS=n.getTime();
	while(a){
		w=new Date();
		wMS=w.getTime();
		if(wMS-sMS&gt;s) a=false;
	}
}
// how to use
alert('in the beginning there was a pause...');
jsleep(3);
alert('3 seconds after... the pause was gone.');
</pre>
<p>I&#8217;ve tested it in Google Chrome, Firefox 3 and Internet Explorer 7.  Works like a charm.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this Post through Social Bookmarking</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2009%2F02%2F05%2Fjavascript-sleep-function%2F&amp;title=Javascript%20Sleep%20Function&amp;bodytext=I%27ll%20make%20this%20short%20and%20quick.%20%20I%27ve%20been%20searching%20the%20web%20for%20a%20Javascript%20sleep%20function%20that%20works%20and%20came%20across%20this.%20%20It%20was%20presented%20as%20a%20class%20but%20what%20I%20needed%20was%20just%20a%20function%20so%20I%20rewrote%20the%20code%20a%20bit.%20%20Here%27s%20the%20end%20result%20of%20my" title="Digg"><img src="http://coderscult.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2009%2F02%2F05%2Fjavascript-sleep-function%2F" title="Sphinn"><img src="http://coderscult.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2009%2F02%2F05%2Fjavascript-sleep-function%2F&amp;title=Javascript%20Sleep%20Function&amp;notes=I%27ll%20make%20this%20short%20and%20quick.%20%20I%27ve%20been%20searching%20the%20web%20for%20a%20Javascript%20sleep%20function%20that%20works%20and%20came%20across%20this.%20%20It%20was%20presented%20as%20a%20class%20but%20what%20I%20needed%20was%20just%20a%20function%20so%20I%20rewrote%20the%20code%20a%20bit.%20%20Here%27s%20the%20end%20result%20of%20my" title="del.icio.us"><img src="http://coderscult.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2009%2F02%2F05%2Fjavascript-sleep-function%2F&amp;t=Javascript%20Sleep%20Function" title="Facebook"><img src="http://coderscult.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.mixx.com/submit?page_url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2009%2F02%2F05%2Fjavascript-sleep-function%2F&amp;title=Javascript%20Sleep%20Function" title="Mixx"><img src="http://coderscult.com/wp-content/plugins/sociable/images/mixx.png" title="Mixx" alt="Mixx" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2009%2F02%2F05%2Fjavascript-sleep-function%2F&amp;title=Javascript%20Sleep%20Function&amp;annotation=I%27ll%20make%20this%20short%20and%20quick.%20%20I%27ve%20been%20searching%20the%20web%20for%20a%20Javascript%20sleep%20function%20that%20works%20and%20came%20across%20this.%20%20It%20was%20presented%20as%20a%20class%20but%20what%20I%20needed%20was%20just%20a%20function%20so%20I%20rewrote%20the%20code%20a%20bit.%20%20Here%27s%20the%20end%20result%20of%20my" title="Google Bookmarks"><img src="http://coderscult.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2009%2F02%2F05%2Fjavascript-sleep-function%2F&amp;title=Javascript%20Sleep%20Function" title="StumbleUpon"><img src="http://coderscult.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2009%2F02%2F05%2Fjavascript-sleep-function%2F" title="Technorati"><img src="http://coderscult.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="" title="YahooMyWeb"><img src="http://coderscult.com/wp-content/plugins/sociable/images/" title="YahooMyWeb" alt="YahooMyWeb" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://coderscult.com/javascript-ajax/2009/02/05/javascript-sleep-function/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Rounded Corners on ALL Browsers</title>
		<link>http://coderscult.com/xhtml-css/2008/11/17/rounded-corners-on-all-browsers/</link>
		<comments>http://coderscult.com/xhtml-css/2008/11/17/rounded-corners-on-all-browsers/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 03:48:30 +0000</pubDate>
		<dc:creator>Mike Lopez</dc:creator>
				<category><![CDATA[HTML/XHTML and CSS]]></category>
		<category><![CDATA[Javascript/AJAX]]></category>
		<category><![CDATA[rounded corners]]></category>

		<guid isPermaLink="false">http://coderscult.com/?p=51</guid>
		<description><![CDATA[Web designers out there!  Have you ever wanted to have rounded corners on the web pages you design but without the use of ugly GIFs or IE-troublesome PNGs?  I&#8217;ve got good news for you and it&#8217;s called jQuery Corners.  Have a look at the screenshot below:


This nifty little jQuery plugin will allow [...]]]></description>
			<content:encoded><![CDATA[<p>Web designers out there!  Have you ever wanted to have rounded corners on the web pages you design but without the use of ugly GIFs or IE-troublesome PNGs?  I&#8217;ve got good news for you and it&#8217;s called jQuery Corners.  Have a look at the screenshot below:</p>
<p><span id="more-51"></span></p>
<p><a href="http://www.atblabs.com/jquery.corners.html"><img src="http://coderscult.com/wp-content/uploads/2008/11/jquery-rounded-corners.jpg" alt="jQuery Rounded Corners" title="jQuery Rounded Corners" width="400" height="146" class="size-full wp-image-54" /></a></p>
<p>This nifty little jQuery plugin will allow you to have anti-aliased rounded corners on your design without the hassle of creating images or worrying about browser compatibility.  Note that it&#8217;s just a jQuery plugin which means that you&#8217;ll also need the <a href="http://jquery.com/">jQuery library</a> which you can get for free.</p>
<p><em>How does jQuery Corners do it?</em></p>
<p>Well, first it checks if the browser supports rounded corners and if so uses the browser&#8217;s built-in rounded corners support.  If the browser however doesn&#8217;t support rounded corners, then jQuery Corners uses its own algorithm to emulate rounded corners.  I took a look at the algorithm&#8217;s generated code and it looks like it&#8217;s using DIVs with varying width and colors to do to the trick.  Simple and elegant but most of all it works.</p>
<p>Give it a try for yourself &#8211; <a href="http://www.atblabs.com/jquery.corners.html">jQuery Corners</a></p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this Post through Social Bookmarking</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fcoderscult.com%2Fxhtml-css%2F2008%2F11%2F17%2Frounded-corners-on-all-browsers%2F&amp;title=Rounded%20Corners%20on%20ALL%20Browsers&amp;bodytext=Web%20designers%20out%20there%21%20%20Have%20you%20ever%20wanted%20to%20have%20rounded%20corners%20on%20the%20web%20pages%20you%20design%20but%20without%20the%20use%20of%20ugly%20GIFs%20or%20IE-troublesome%20PNGs%3F%20%20I%27ve%20got%20good%20news%20for%20you%20and%20it%27s%20called%20jQuery%20Corners.%20%20Have%20a%20look%20at%20the%20screenshot%20bel" title="Digg"><img src="http://coderscult.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fcoderscult.com%2Fxhtml-css%2F2008%2F11%2F17%2Frounded-corners-on-all-browsers%2F" title="Sphinn"><img src="http://coderscult.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fcoderscult.com%2Fxhtml-css%2F2008%2F11%2F17%2Frounded-corners-on-all-browsers%2F&amp;title=Rounded%20Corners%20on%20ALL%20Browsers&amp;notes=Web%20designers%20out%20there%21%20%20Have%20you%20ever%20wanted%20to%20have%20rounded%20corners%20on%20the%20web%20pages%20you%20design%20but%20without%20the%20use%20of%20ugly%20GIFs%20or%20IE-troublesome%20PNGs%3F%20%20I%27ve%20got%20good%20news%20for%20you%20and%20it%27s%20called%20jQuery%20Corners.%20%20Have%20a%20look%20at%20the%20screenshot%20bel" title="del.icio.us"><img src="http://coderscult.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fcoderscult.com%2Fxhtml-css%2F2008%2F11%2F17%2Frounded-corners-on-all-browsers%2F&amp;t=Rounded%20Corners%20on%20ALL%20Browsers" title="Facebook"><img src="http://coderscult.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.mixx.com/submit?page_url=http%3A%2F%2Fcoderscult.com%2Fxhtml-css%2F2008%2F11%2F17%2Frounded-corners-on-all-browsers%2F&amp;title=Rounded%20Corners%20on%20ALL%20Browsers" title="Mixx"><img src="http://coderscult.com/wp-content/plugins/sociable/images/mixx.png" title="Mixx" alt="Mixx" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fcoderscult.com%2Fxhtml-css%2F2008%2F11%2F17%2Frounded-corners-on-all-browsers%2F&amp;title=Rounded%20Corners%20on%20ALL%20Browsers&amp;annotation=Web%20designers%20out%20there%21%20%20Have%20you%20ever%20wanted%20to%20have%20rounded%20corners%20on%20the%20web%20pages%20you%20design%20but%20without%20the%20use%20of%20ugly%20GIFs%20or%20IE-troublesome%20PNGs%3F%20%20I%27ve%20got%20good%20news%20for%20you%20and%20it%27s%20called%20jQuery%20Corners.%20%20Have%20a%20look%20at%20the%20screenshot%20bel" title="Google Bookmarks"><img src="http://coderscult.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fcoderscult.com%2Fxhtml-css%2F2008%2F11%2F17%2Frounded-corners-on-all-browsers%2F&amp;title=Rounded%20Corners%20on%20ALL%20Browsers" title="StumbleUpon"><img src="http://coderscult.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fcoderscult.com%2Fxhtml-css%2F2008%2F11%2F17%2Frounded-corners-on-all-browsers%2F" title="Technorati"><img src="http://coderscult.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="" title="YahooMyWeb"><img src="http://coderscult.com/wp-content/plugins/sociable/images/" title="YahooMyWeb" alt="YahooMyWeb" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://coderscult.com/xhtml-css/2008/11/17/rounded-corners-on-all-browsers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Correctly Render Transparent PNG images in Internet Explorer</title>
		<link>http://coderscult.com/javascript-ajax/2008/04/25/how-to-correctly-render-transparent-png-images-in-internet-explorer/</link>
		<comments>http://coderscult.com/javascript-ajax/2008/04/25/how-to-correctly-render-transparent-png-images-in-internet-explorer/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 18:12:51 +0000</pubDate>
		<dc:creator>Mike Lopez</dc:creator>
				<category><![CDATA[Javascript/AJAX]]></category>

		<guid isPermaLink="false">http://coderscult.com/javascript-ajax/2008/04/25/how-to-correctly-render-transparent-png-images-in-internet-explorer/</guid>
		<description><![CDATA[PNG images are more often better than GIF when it comes to rendering images with transparency mainly because GIF can only support 256 colors while PNG can support 32-bit colors.  Here&#8217;s a graphical comparison between the two.


PNG is obviously better!  Problem is that Internet Explorer 6 and below doesn&#8217;t support PNG images natively [...]]]></description>
			<content:encoded><![CDATA[<p><acronym title="Portable Network Graphics">PNG</acronym> images are more often better than <acronym title="Graphics Interchange Format">GIF</acronym> when it comes to rendering images with transparency mainly because GIF can only support 256 colors while PNG can support 32-bit colors.  Here&#8217;s a graphical comparison between the two.</p>
<p><span id="more-34"></span></p>
<p align="center"><img src='http://coderscult.com/wp-content/uploads/2008/04/gif-png-comparison.png' alt='Comparing Transparent GIF and PNG' /></p>
<p>PNG is obviously better!  Problem is that Internet Explorer 6 and below doesn&#8217;t support PNG images natively and that&#8217;s kind of bad for web designers who wish to make use of the power of the PNG image format.  Other browsers such as Firefox, Opera and Safari support PNG natively but not IE6 and below.  Why?  Well you go and ask Microsoft.</p>
<p align="center"><img src='http://coderscult.com/wp-content/uploads/2008/04/png-ie-problem.png' alt='PNG problem in Internet Explorer 6 and below' /></p>
<p>Is there a solution?  Of course!  I won&#8217;t try to explain how it works because there are many websites out there explaining how it works.  I&#8217;ve pretty much based my code on a solution provided by Microsoft which uses the proprietary AlphaImageLoader filter.  The problem with their solution is that you have to practically edit all your web pages plus it won&#8217;t validate with CSS standards.</p>
<p>After studying the basics, I came up with a simple and valid solution that works.  With a little help from a 1&#215;1 transparent GIF and a few lines of javascript, you can properly render PNG images with alpha transparency in Internet Explorer.  Here&#8217;s what you do.</p>
<ol>
<li>Upload this <a href='http://coderscult.com/wp-content/uploads/2008/04/1.gif' title='Our Nifty 1×1 Transparent GIF'>Nifty 1×1 Transparent GIF</a> to your web server.  Put it in the same folder as your html file.</li>
<li>Upload this <a href='http://coderscult.com/wp-content/uploads/2008/04/iepng.js' title='Nifty Javascript that fixes PNGs in IE'>Nifty Javascript that fixes PNGs in IE</a> to your web server.  Put it in the same folder as your html file.</li>
<li>Paste the following javascript code somewhere inside the &lt;head&gt;&lt;/head&gt; section of your page.
<p><code style="font-size:.8em">&lt;!<span>-</span>-[if lte IE 6]&gt;<br />
&lt;script language=&quot;javascript&quot; src=&quot;iepng.js&quot;&gt;&lt;/script&gt;<br />
&lt;![endif]-<span>-</span>&gt;</code></p>
</li>
<li>Refresh the page and enjoy transparent PNGs in Internet Explorer</li>
</ol>
<p>There you go.  Hope this helped.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this Post through Social Bookmarking</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F04%2F25%2Fhow-to-correctly-render-transparent-png-images-in-internet-explorer%2F&amp;title=How%20to%20Correctly%20Render%20Transparent%20PNG%20images%20in%20Internet%20Explorer&amp;bodytext=PNG%20images%20are%20more%20often%20better%20than%20GIF%20when%20it%20comes%20to%20rendering%20images%20with%20transparency%20mainly%20because%20GIF%20can%20only%20support%20256%20colors%20while%20PNG%20can%20support%2032-bit%20colors.%20%20Here%27s%20a%20graphical%20comparison%20between%20the%20two.%0D%0A%0D%0A%0A%0A%0D%0A%0D%0APNG%20is%20obviousl" title="Digg"><img src="http://coderscult.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F04%2F25%2Fhow-to-correctly-render-transparent-png-images-in-internet-explorer%2F" title="Sphinn"><img src="http://coderscult.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F04%2F25%2Fhow-to-correctly-render-transparent-png-images-in-internet-explorer%2F&amp;title=How%20to%20Correctly%20Render%20Transparent%20PNG%20images%20in%20Internet%20Explorer&amp;notes=PNG%20images%20are%20more%20often%20better%20than%20GIF%20when%20it%20comes%20to%20rendering%20images%20with%20transparency%20mainly%20because%20GIF%20can%20only%20support%20256%20colors%20while%20PNG%20can%20support%2032-bit%20colors.%20%20Here%27s%20a%20graphical%20comparison%20between%20the%20two.%0D%0A%0D%0A%0A%0A%0D%0A%0D%0APNG%20is%20obviousl" title="del.icio.us"><img src="http://coderscult.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F04%2F25%2Fhow-to-correctly-render-transparent-png-images-in-internet-explorer%2F&amp;t=How%20to%20Correctly%20Render%20Transparent%20PNG%20images%20in%20Internet%20Explorer" title="Facebook"><img src="http://coderscult.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.mixx.com/submit?page_url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F04%2F25%2Fhow-to-correctly-render-transparent-png-images-in-internet-explorer%2F&amp;title=How%20to%20Correctly%20Render%20Transparent%20PNG%20images%20in%20Internet%20Explorer" title="Mixx"><img src="http://coderscult.com/wp-content/plugins/sociable/images/mixx.png" title="Mixx" alt="Mixx" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F04%2F25%2Fhow-to-correctly-render-transparent-png-images-in-internet-explorer%2F&amp;title=How%20to%20Correctly%20Render%20Transparent%20PNG%20images%20in%20Internet%20Explorer&amp;annotation=PNG%20images%20are%20more%20often%20better%20than%20GIF%20when%20it%20comes%20to%20rendering%20images%20with%20transparency%20mainly%20because%20GIF%20can%20only%20support%20256%20colors%20while%20PNG%20can%20support%2032-bit%20colors.%20%20Here%27s%20a%20graphical%20comparison%20between%20the%20two.%0D%0A%0D%0A%0A%0A%0D%0A%0D%0APNG%20is%20obviousl" title="Google Bookmarks"><img src="http://coderscult.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F04%2F25%2Fhow-to-correctly-render-transparent-png-images-in-internet-explorer%2F&amp;title=How%20to%20Correctly%20Render%20Transparent%20PNG%20images%20in%20Internet%20Explorer" title="StumbleUpon"><img src="http://coderscult.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F04%2F25%2Fhow-to-correctly-render-transparent-png-images-in-internet-explorer%2F" title="Technorati"><img src="http://coderscult.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="" title="YahooMyWeb"><img src="http://coderscult.com/wp-content/plugins/sociable/images/" title="YahooMyWeb" alt="YahooMyWeb" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://coderscult.com/javascript-ajax/2008/04/25/how-to-correctly-render-transparent-png-images-in-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Google Translate Working Example</title>
		<link>http://coderscult.com/javascript-ajax/2008/03/22/google-translate-working-example/</link>
		<comments>http://coderscult.com/javascript-ajax/2008/03/22/google-translate-working-example/#comments</comments>
		<pubDate>Sat, 22 Mar 2008 09:55:17 +0000</pubDate>
		<dc:creator>Mike Lopez</dc:creator>
				<category><![CDATA[Javascript/AJAX]]></category>

		<guid isPermaLink="false">http://coderscult.com/javascript-ajax/2008/03/22/google-translate-working-example/</guid>
		<description><![CDATA[As promised, here&#8217;s a sample implementation of the Google Translate API.
&#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34; ?&#62;
&#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Transitional//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#34;&#62;
&#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62;
&#60;head&#62;
&#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=UTF-8&#34; /&#62;
&#60;title&#62;Google Translate&#60;/title&#62;
&#60;script language=&#34;javascript&#34; src=&#34;http://www.google.com/jsapi&#34;&#62;&#60;/script&#62;
&#60;script language=&#34;javascript&#34;&#62;
&#160;google.load &#40;&#34;language&#34;, &#34;1&#34;&#41;;
&#160;function gtrans &#40;f&#41; &#123;
&#160; document.getElementById&#40;&#34;translation&#34;&#41;.innerHTML = &#34;-&#34;;
&#160; var lang = f.langpair.value.split&#40;&#34;&#124;&#34;&#41;;
&#160; google.language.translate &#40;f.translate.value, lang&#91;0&#93;, lang&#91;1&#93;, function &#40;result&#41; &#123;
&#160; &#160;if &#40;!result.error&#41; &#123;
&#160; &#160; var container [...]]]></description>
			<content:encoded><![CDATA[<p>As promised, here&#8217;s a sample implementation of the Google Translate API.</p>
<div class="dean_ch" style="white-space: wrap;">&lt;?xml version=<span class="st0">&quot;1.0&quot;</span> encoding=<span class="st0">&quot;UTF-8&quot;</span> <span class="kw2">?&gt;</span><br />
&lt;!DOCTYPE html <span class="kw2">PUBLIC</span> <span class="st0">&quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span> <span class="st0">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;</span>&gt;<br />
&lt;html xmlns=<span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span>&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=<span class="st0">&quot;Content-Type&quot;</span> content=<span class="st0">&quot;text/html; charset=UTF-8&quot;</span> /&gt;<br />
&lt;title&gt;Google Translate&lt;/title&gt;<br />
<span class="kw2">&lt;script language</span>=<span class="st0">&quot;javascript&quot;</span> src=<span class="st0">&quot;http://www.google.com/jsapi&quot;</span>&gt;&lt;/script&gt;<br />
<span class="kw2">&lt;script language</span>=<span class="st0">&quot;javascript&quot;</span>&gt;<br />
&nbsp;google.load <span class="br0">&#40;</span><span class="st0">&quot;language&quot;</span>, <span class="st0">&quot;1&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp;<span class="kw2">function</span> gtrans <span class="br0">&#40;</span>f<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; document.getElementById<span class="br0">&#40;</span><span class="st0">&quot;translation&quot;</span><span class="br0">&#41;</span>.innerHTML = <span class="st0">&quot;-&quot;</span>;<br />
&nbsp; <span class="kw2">var</span> lang = f.langpair.value.<a href="http://www.php.net/split"><span class="kw3">split</span></a><span class="br0">&#40;</span><span class="st0">&quot;|&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; google.language.translate <span class="br0">&#40;</span>f.translate.value, lang<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, lang<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>, <span class="kw2">function</span> <span class="br0">&#40;</span>result<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>!result.error<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> container = document.getElementById<span class="br0">&#40;</span><span class="st0">&quot;translation&quot;</span><span class="br0">&#41;</span>.innerHTML = result.translation;<br />
&nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
&nbsp;<span class="br0">&#125;</span><br />
<span class="kw2">&lt;/script&gt;</span><br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;form onsubmit=<span class="st0">&quot;return false&quot;</span>&gt;<br />
&nbsp;&lt;p&gt;Enter text to translate and click <span class="st0">&quot;Translate&quot;</span>&lt;/p&gt;<br />
&nbsp;&lt;textarea name=<span class="st0">&quot;translate&quot;</span> cols=<span class="st0">&quot;50&quot;</span> rows=<span class="st0">&quot;5&quot;</span>&gt;&lt;/textarea&gt;<br />
&nbsp;&lt;br /&gt;<br />
&nbsp;&lt;select name=<span class="st0">&quot;langpair&quot;</span>&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;ar|en&quot;</span>&gt;Arabic to English&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;zh|en&quot;</span>&gt;Chinese to English&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;zh-CN|zh-TW&quot;</span>&gt;Chinese <span class="br0">&#40;</span>Simplified to Traditional<span class="br0">&#41;</span>&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;zh-TW|zh-CN&quot;</span>&gt;Chinese <span class="br0">&#40;</span>Traditional to Simplified<span class="br0">&#41;</span>&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;nl|en&quot;</span>&gt;Dutch to English&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;en|ar&quot;</span>&gt;English to Arabic&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;en|zh-CN&quot;</span>&gt;English to Chinese <span class="br0">&#40;</span>Simplified<span class="br0">&#41;</span>&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;en|zh-TW&quot;</span>&gt;English to Chinese <span class="br0">&#40;</span>Traditional<span class="br0">&#41;</span>&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;en|nl&quot;</span>&gt;English to Dutch&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;en|fr&quot;</span>&gt;English to French&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;en|de&quot;</span>&gt;English to German&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;en|el&quot;</span>&gt;English to Greek&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;en|it&quot;</span>&gt;English to Italian&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;en|ja&quot;</span>&gt;English to Japanese&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;en|ko&quot;</span>&gt;English to Korean&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;en|pt&quot;</span>&gt;English to Portuguese&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;en|ru&quot;</span>&gt;English to Russian&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;en|es&quot;</span>&gt;English to Spanish&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;fr|en&quot;</span>&gt;French to English&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;fr|de&quot;</span>&gt;French to German&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;de|en&quot;</span>&gt;German to English&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;de|fr&quot;</span>&gt;German to French&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;el|en&quot;</span>&gt;Greek to English&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;it|en&quot;</span>&gt;Italian to English&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;ja|en&quot;</span>&gt;Japanese to English&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;ko|en&quot;</span>&gt;Korean to English&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;pt|en&quot;</span>&gt;Portuguese to English&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;ru|en&quot;</span>&gt;Russian to English&lt;/option&gt;<br />
&nbsp; &lt;option value=<span class="st0">&quot;es|en&quot;</span>&gt;Spanish to English&lt;/option&gt;<br />
&nbsp;&lt;/select&gt;<br />
&nbsp;&lt;input type=<span class="st0">&quot;button&quot;</span> value=<span class="st0">&quot;Translate&quot;</span> onclick=<span class="st0">&quot;gtrans(this.form)&quot;</span> /&gt;<br />
&nbsp;&lt;p id=<span class="st0">&quot;translation&quot;</span> style=<span class="st0">&quot;border:1px solid #00f;padding:5px;width:400px&quot;</span>&gt;-&lt;/p&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</div>
<p><span id="more-19"></span></p>
<p>Here&#8217;s the working sample:</p>
<p><iframe src="http://coderscult.com/wp-content/uploads/2008/03/index.html" width="450" height="400"><a href='http://coderscult.com/wp-content/uploads/2008/03/index.html' title='Google Translate Sample Implementation'>Google Translate Sample Implementation</a></iframe></p>
<p>With this API, translating a website from one language to another will be pretty straightforward and FREE.  Thanks to Google for providing us with this API, now we can finally increase usability in our websites.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this Post through Social Bookmarking</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F22%2Fgoogle-translate-working-example%2F&amp;title=Google%20Translate%20Working%20Example&amp;bodytext=As%20promised%2C%20here%27s%20a%20sample%20implementation%20of%20the%20Google%20Translate%20API.%0D%0A%0D%0A%26lt%3B%3Fxml%20version%3D%26quot%3B1.0%26quot%3B%20encoding%3D%26quot%3BUTF-8%26quot%3B%20%3F%26gt%3B%0D%0A%26lt%3B%21DOCTYPE%20html%20PUBLIC%20%26quot%3B-%2F%2FW3C%2F%2FDTD%20XHTML%201.0%20Transitional%2F%2FEN%26quot%3B%20%26quot%3Bhttp%3A%2F%2Fwww.w3.org%2FTR%2Fxhtm" title="Digg"><img src="http://coderscult.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F22%2Fgoogle-translate-working-example%2F" title="Sphinn"><img src="http://coderscult.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F22%2Fgoogle-translate-working-example%2F&amp;title=Google%20Translate%20Working%20Example&amp;notes=As%20promised%2C%20here%27s%20a%20sample%20implementation%20of%20the%20Google%20Translate%20API.%0D%0A%0D%0A%26lt%3B%3Fxml%20version%3D%26quot%3B1.0%26quot%3B%20encoding%3D%26quot%3BUTF-8%26quot%3B%20%3F%26gt%3B%0D%0A%26lt%3B%21DOCTYPE%20html%20PUBLIC%20%26quot%3B-%2F%2FW3C%2F%2FDTD%20XHTML%201.0%20Transitional%2F%2FEN%26quot%3B%20%26quot%3Bhttp%3A%2F%2Fwww.w3.org%2FTR%2Fxhtm" title="del.icio.us"><img src="http://coderscult.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F22%2Fgoogle-translate-working-example%2F&amp;t=Google%20Translate%20Working%20Example" title="Facebook"><img src="http://coderscult.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.mixx.com/submit?page_url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F22%2Fgoogle-translate-working-example%2F&amp;title=Google%20Translate%20Working%20Example" title="Mixx"><img src="http://coderscult.com/wp-content/plugins/sociable/images/mixx.png" title="Mixx" alt="Mixx" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F22%2Fgoogle-translate-working-example%2F&amp;title=Google%20Translate%20Working%20Example&amp;annotation=As%20promised%2C%20here%27s%20a%20sample%20implementation%20of%20the%20Google%20Translate%20API.%0D%0A%0D%0A%26lt%3B%3Fxml%20version%3D%26quot%3B1.0%26quot%3B%20encoding%3D%26quot%3BUTF-8%26quot%3B%20%3F%26gt%3B%0D%0A%26lt%3B%21DOCTYPE%20html%20PUBLIC%20%26quot%3B-%2F%2FW3C%2F%2FDTD%20XHTML%201.0%20Transitional%2F%2FEN%26quot%3B%20%26quot%3Bhttp%3A%2F%2Fwww.w3.org%2FTR%2Fxhtm" title="Google Bookmarks"><img src="http://coderscult.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F22%2Fgoogle-translate-working-example%2F&amp;title=Google%20Translate%20Working%20Example" title="StumbleUpon"><img src="http://coderscult.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F22%2Fgoogle-translate-working-example%2F" title="Technorati"><img src="http://coderscult.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="" title="YahooMyWeb"><img src="http://coderscult.com/wp-content/plugins/sociable/images/" title="YahooMyWeb" alt="YahooMyWeb" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://coderscult.com/javascript-ajax/2008/03/22/google-translate-working-example/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Javascript Based Google Translate API Released</title>
		<link>http://coderscult.com/javascript-ajax/2008/03/21/javascript-based-google-translate-api-released/</link>
		<comments>http://coderscult.com/javascript-ajax/2008/03/21/javascript-based-google-translate-api-released/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 10:41:54 +0000</pubDate>
		<dc:creator>Mike Lopez</dc:creator>
				<category><![CDATA[Javascript/AJAX]]></category>

		<guid isPermaLink="false">http://coderscult.com/javascript-ajax/2008/03/21/javascript-based-google-translate-api-released/</guid>
		<description><![CDATA[If you need to translate your website from one language to another then I have some good news for you.  Google Translate has released a JavaScript based API that&#8217;s both easy to use and implement.  It can handle 13 different languages and as much as 29 language pairs.

I already checked the API documentation [...]]]></description>
			<content:encoded><![CDATA[<p>If you need to translate your website from one language to another then I have some good news for you.  <a href="http://translate.google.com/translate_t">Google Translate</a> has released a <a href="http://code.google.com/apis/ajaxlanguage/">JavaScript based API</a> that&#8217;s both easy to use and implement.  It can handle 13 different languages and as much as 29 language pairs.</p>
<p><span id="more-18"></span></p>
<p>I already checked the API documentation and it&#8217;s definitely easy to implement.  <a href="http://coderscult.com/javascript-ajax/2008/03/22/google-translate-working-example/">Check out my sample implementation</a>.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this Post through Social Bookmarking</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F21%2Fjavascript-based-google-translate-api-released%2F&amp;title=Javascript%20Based%20Google%20Translate%20API%20Released&amp;bodytext=If%20you%20need%20to%20translate%20your%20website%20from%20one%20language%20to%20another%20then%20I%20have%20some%20good%20news%20for%20you.%20%20Google%20Translate%20has%20released%20a%20JavaScript%20based%20API%20that%27s%20both%20easy%20to%20use%20and%20implement.%20%20It%20can%20handle%2013%20different%20languages%20and%20as%20much%20as%202" title="Digg"><img src="http://coderscult.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F21%2Fjavascript-based-google-translate-api-released%2F" title="Sphinn"><img src="http://coderscult.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F21%2Fjavascript-based-google-translate-api-released%2F&amp;title=Javascript%20Based%20Google%20Translate%20API%20Released&amp;notes=If%20you%20need%20to%20translate%20your%20website%20from%20one%20language%20to%20another%20then%20I%20have%20some%20good%20news%20for%20you.%20%20Google%20Translate%20has%20released%20a%20JavaScript%20based%20API%20that%27s%20both%20easy%20to%20use%20and%20implement.%20%20It%20can%20handle%2013%20different%20languages%20and%20as%20much%20as%202" title="del.icio.us"><img src="http://coderscult.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F21%2Fjavascript-based-google-translate-api-released%2F&amp;t=Javascript%20Based%20Google%20Translate%20API%20Released" title="Facebook"><img src="http://coderscult.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.mixx.com/submit?page_url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F21%2Fjavascript-based-google-translate-api-released%2F&amp;title=Javascript%20Based%20Google%20Translate%20API%20Released" title="Mixx"><img src="http://coderscult.com/wp-content/plugins/sociable/images/mixx.png" title="Mixx" alt="Mixx" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F21%2Fjavascript-based-google-translate-api-released%2F&amp;title=Javascript%20Based%20Google%20Translate%20API%20Released&amp;annotation=If%20you%20need%20to%20translate%20your%20website%20from%20one%20language%20to%20another%20then%20I%20have%20some%20good%20news%20for%20you.%20%20Google%20Translate%20has%20released%20a%20JavaScript%20based%20API%20that%27s%20both%20easy%20to%20use%20and%20implement.%20%20It%20can%20handle%2013%20different%20languages%20and%20as%20much%20as%202" title="Google Bookmarks"><img src="http://coderscult.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F21%2Fjavascript-based-google-translate-api-released%2F&amp;title=Javascript%20Based%20Google%20Translate%20API%20Released" title="StumbleUpon"><img src="http://coderscult.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F21%2Fjavascript-based-google-translate-api-released%2F" title="Technorati"><img src="http://coderscult.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="" title="YahooMyWeb"><img src="http://coderscult.com/wp-content/plugins/sociable/images/" title="YahooMyWeb" alt="YahooMyWeb" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://coderscult.com/javascript-ajax/2008/03/21/javascript-based-google-translate-api-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX Username Validation</title>
		<link>http://coderscult.com/javascript-ajax/2008/03/17/ajax-username-validation/</link>
		<comments>http://coderscult.com/javascript-ajax/2008/03/17/ajax-username-validation/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 21:13:07 +0000</pubDate>
		<dc:creator>Mike Lopez</dc:creator>
				<category><![CDATA[Javascript/AJAX]]></category>

		<guid isPermaLink="false">http://coderscult.com/javascriptajax/2008/03/17/ajax-username-validation/</guid>
		<description><![CDATA[Form input validation is sometimes an annoying part in web development but it&#8217;s something that we web developers can&#8217;t avoid.  In order to make sure that the data being entered by our users are valid, we simply have to validate.  Another good use of validation is to provide feedback to the user on [...]]]></description>
			<content:encoded><![CDATA[<p>Form input validation is sometimes an annoying part in web development but it&#8217;s something that we web developers can&#8217;t avoid.  In order to make sure that the data being entered by our users are valid, we simply have to validate.  Another good use of validation is to provide feedback to the user on whether what they are typing is acceptable or not.</p>
<p><span id="more-15"></span></p>
<p>One such case is in user registration forms wherein we ask the user to enter a username.  It will be nice if we can provide them immediate feedback on whether the username they are choosing is of the correct length, contains invalid characters and of course if it&#8217;s still available.  For this purpose, I wrote a 156 line AJAX file that shows how to do it.</p>
<p>It&#8217;s divided into three sections&#8230;</p>
<ol>
<li>The PHP section &#8211; which runs on the server to check if the username is available</li>
<li>The Javascript section &#8211; which contains are AJAX stuff and does some client-side validation as well</li>
<li>And the HTML Form &#8211; this is where the user enters the username</li>
</ol>
<p>I simplified the form to contain only the username field &#8211; after all, this is just an example / tutorial.</p>
<p><strong>The PHP Part</strong></p>
<div class="dean_ch" style="white-space: wrap;"><span class="co1">// sample code for testing purposes only</span><br />
&nbsp;<span class="co1">// existing usernames</span><br />
&nbsp;<span class="re0">$usernames</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a> <span class="br0">&#40;</span><span class="st0">&quot;administrator&quot;</span>, <span class="st0">&quot;peterpiper&quot;</span>, <span class="st0">&quot;peterpan&quot;</span>, <span class="st0">&quot;superman&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&quot;u&quot;</span><span class="br0">&#93;</span> != <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/in_array"><span class="kw3">in_array</span></a> <span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&quot;u&quot;</span><span class="br0">&#93;</span>, <span class="re0">$usernames</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp;<span class="co1">// if username is in our array then output the string &quot;0&quot;</span><br />
&nbsp; &nbsp;<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;0&quot;</span>;<br />
&nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp;<span class="co1">// if username is not in our array then output the string &quot;1&quot;</span><br />
&nbsp; &nbsp;<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;1&quot;</span>;<br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a>;<br />
&nbsp;<span class="br0">&#125;</span><br />
&nbsp;</div>
<p>For the purpose of providing an example, I simply entered a list of &#8220;existing&#8221; usernames into an array.  In the real world, you will be checking the value of $_GET["u"] against a database.</p>
<p><strong>The Javascript Part</strong></p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw2">function</span> ajax_call <span class="br0">&#40;</span>url, callback_function, error_function<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp;<span class="kw2">var</span> xmlHttp = <span class="kw2">null</span>;<br />
&nbsp;<span class="kw1">try</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="co1">// for standard browsers</span><br />
&nbsp; xmlHttp = <span class="kw2">new</span> XMLHttpRequest <span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp;<span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="co1">// for internet explorer</span><br />
&nbsp; <span class="kw1">try</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp;xmlHttp = <span class="kw2">new</span> ActiveXObject <span class="br0">&#40;</span><span class="st0">&quot;Msxml2.XMLHTTP&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp;xmlHttp = <span class="kw2">new</span> ActiveXObject <span class="br0">&#40;</span><span class="st0">&quot;Microsoft.XMLHTTP&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
&nbsp;xmlHttp.<span class="me1">onreadystatechange</span> = <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>xmlHttp.<span class="me1">readyState</span> == <span class="nu0">4</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp;<span class="kw1">try</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>xmlHttp.<span class="kw3">status</span> == <span class="nu0">200</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span class="co1">// we got the data, let&quot;s call the callback function</span><br />
&nbsp; &nbsp; &nbsp;callback_function <span class="br0">&#40;</span>xmlHttp.<span class="me1">responseText</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp;<span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// oops we have an error, call the error function</span><br />
&nbsp; &nbsp; error_function <span class="br0">&#40;</span>e.<span class="me1">description</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="co1">// open the url</span><br />
&nbsp; xmlHttp.<span class="kw3">open</span> <span class="br0">&#40;</span><span class="st0">&quot;GET&quot;</span>, url<span class="br0">&#41;</span>;<br />
&nbsp; <span class="co1">// and send the data</span><br />
&nbsp; xmlHttp.<span class="me1">send</span> <span class="br0">&#40;</span><span class="kw2">null</span><span class="br0">&#41;</span>;<br />
&nbsp;<span class="br0">&#125;</span><br />
&nbsp;<br />
&nbsp;<span class="coMULTI">/*<br />
&nbsp; * this function is called for every keypress on our input field<br />
&nbsp; * it accepts one parameter &#8211; i &#8211; which is the object referencing<br />
&nbsp; * our input field<br />
&nbsp; */</span><br />
&nbsp;<span class="kw2">function</span> usercheck_init <span class="br0">&#40;</span>i<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp;<span class="kw2">var</span> obj = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;ajax_output&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp;obj.<span class="me1">innerHTML</span> = <span class="st0">&quot;&quot;</span>; <span class="co1">// &lt;- clear the status field</span><br />
&nbsp;<br />
&nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">value</span>.<span class="me1">length</span> &lt; <span class="nu0">1</span><span class="br0">&#41;</span> <span class="kw1">return</span>;<br />
&nbsp;<br />
&nbsp; <span class="kw2">var</span> err = <span class="kw2">new</span> Array <span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp;<span class="co1">// pre-ajax checks&#8230; let&quot;s check everything that we can check before calling ajax</span><br />
&nbsp;<span class="co1">// usernames can only contain letters, numbers and underscores</span><br />
&nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">value</span>.<span class="me1">match</span> <span class="br0">&#40;</span><span class="re0">/<span class="br0">&#91;</span>^a-z0-9_<span class="br0">&#93;</span>/</span><span class="br0">&#41;</span><span class="br0">&#41;</span> err<span class="br0">&#91;</span>err.<span class="me1">length</span><span class="br0">&#93;</span> = <span class="st0">&quot;Username can only contain letters, numbers and underscores&quot;</span>;<br />
&nbsp;<span class="co1">// usernames must be at least 8 characters long</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">value</span>.<span class="me1">length</span> &lt; <span class="nu0">8</span><span class="br0">&#41;</span> err<span class="br0">&#91;</span>err.<span class="me1">length</span><span class="br0">&#93;</span> = <span class="st0">&quot;Username too short&quot;</span>;</p>
<p>&nbsp;<span class="co1">// if we have a pre-ajax error, then show the error</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>err != <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp;obj.<span class="me1">style</span>.<span class="me1">color</span> = <span class="st0">&quot;#ff0000&quot;</span>;<br />
&nbsp; &nbsp;obj.<span class="me1">innerHTML</span> = err.<span class="me1">join</span> <span class="br0">&#40;</span><span class="st0">&quot;&lt;br /&gt;&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;<span class="kw1">return</span>;<br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <br />
&nbsp; <span class="co1">// all pre-ajax checks passed? &nbsp;good, now let&quot;s do our ajax check</span><br />
&nbsp; ajax_call <span class="br0">&#40;</span><span class="st0">&quot;usercheck.php?u=&quot;</span> + i.<span class="me1">value</span>, usercheck_callback, usercheck_error<span class="br0">&#41;</span>; <br />
&nbsp;<span class="br0">&#125;</span><br />
&nbsp;<br />
&nbsp;<span class="coMULTI">/*<br />
&nbsp; * this is our callback function<br />
&nbsp; * all it does is check the data returned by the server<br />
&nbsp; * and decide on whether we show an error or not<br />
&nbsp; */</span><br />
&nbsp;<span class="kw2">function</span> usercheck_callback <span class="br0">&#40;</span>data<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="kw2">var</span> response = <span class="br0">&#40;</span>data == <span class="st0">&quot;1&quot;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; <span class="kw2">var</span> obj = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;ajax_output&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; obj.<span class="me1">style</span>.<span class="me1">color</span> = <span class="br0">&#40;</span>response<span class="br0">&#41;</span> ? <span class="st0">&quot;#008800&quot;</span> : <span class="st0">&quot;#ff0000&quot;</span>;<br />
&nbsp; obj.<span class="me1">innerHTML</span> = <span class="br0">&#40;</span>response == <span class="st0">&quot;1&quot;</span><span class="br0">&#41;</span> ? <span class="st0">&quot;Username OK&quot;</span> : <span class="st0">&quot;Username already taken&quot;</span>;<br />
&nbsp;<span class="br0">&#125;</span><br />
&nbsp;<span class="coMULTI">/*<br />
&nbsp; * this is our error function<br />
&nbsp; * all it does is pop an alert box showing the error<br />
&nbsp; */</span><br />
&nbsp;<span class="kw2">function</span> usercheck_error <span class="br0">&#40;</span>err<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="kw3">alert</span> <span class="br0">&#40;</span><span class="st0">&quot;Error: &quot;</span> + err<span class="br0">&#41;</span>;<br />
&nbsp;<span class="br0">&#125;</span></div>
<p>It&#8217;s pretty self-explanatory but if you&#8217;re a bit confused then <a href="http://coderscult.com/javascriptajax/2008/03/17/ajax-introduction/">read the AJAX Introduction</a> I wrote previously so you can grasp the idea of what&#8217;s being done in the Javascript code above.</p>
<p><strong>The HTML Form</strong></p>
<div class="dean_ch" style="white-space: wrap;">&lt;form method=&quot;post&quot; onsubmit=&quot;return false&quot;&gt;<br />
&nbsp;&lt;dl&gt;<br />
&nbsp; &lt;dt&gt;Username&lt;/dt&gt;<br />
&nbsp; &lt;dd&gt;<br />
&nbsp; &nbsp;&lt;input type=&quot;text&quot; name=&quot;username&quot; value=&quot;&quot; onkeyup=&quot;usercheck_init (this)&quot; /&gt;<br />
&nbsp; &nbsp;&lt;div id=&quot;ajax_output&quot;&gt;&lt;/div&gt;<br />
&nbsp; &lt;/dd&gt;<br />
&nbsp;&lt;/dl&gt;<br />
&lt;/form&gt;</div>
<p>A few things worth mentioning about our HTML form.  First, I placed <strong>onsubmit=&quot;return false&quot;</strong> in the form tag &#8211; you can take that out.  I just don&#8217;t want the form to be submitted when someone presses the enter key on the username field.  Second is the <strong>onkeyup=&quot;usercheck_init (this)&quot;</strong> part.  That&#8217;s what hooks our input field to our ajax call every time the user types a character in our username field.</p>
<p>Now, we put them all together into one nice HTML/PHP file and give it a try.</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw2">&lt;?php</span><br />
<span class="coMULTI">/*<br />
&nbsp;* Username Validation using AJAX<br />
&nbsp;* <br />
&nbsp;* Author: Mike Lopez<br />
&nbsp;* Author URI: http://mikelopez.info , http://coderscult.com<br />
&nbsp;* <br />
&nbsp;* Description:<br />
&nbsp;* &nbsp;This AJAX example consists of three parts<br />
&nbsp;* &nbsp;namely: PHP, Javascript, and HTML FORM<br />
&nbsp;* &nbsp;- The PHP part handles the server side checking of the username<br />
&nbsp;* &nbsp;- The Javascript part contacts the server (the PHP part)<br />
&nbsp;* &nbsp;- The HTML FORM displays the username input field which is<br />
&nbsp;* &nbsp; &nbsp;hooked to Javascript via the onkeyup attribute<br />
&nbsp;*/</span></p>
<p><span class="co1">// *** THE PHP PART ***</span><br />
<span class="co1">// sample code for testing purposes only</span><br />
&nbsp;<span class="co1">// existing usernames</span><br />
&nbsp;<span class="re0">$usernames</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a> <span class="br0">&#40;</span><span class="st0">&quot;administrator&quot;</span>, <span class="st0">&quot;peterpiper&quot;</span>, <span class="st0">&quot;peterpan&quot;</span>, <span class="st0">&quot;superman&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&quot;u&quot;</span><span class="br0">&#93;</span> != <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/in_array"><span class="kw3">in_array</span></a> <span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&quot;u&quot;</span><span class="br0">&#93;</span>, <span class="re0">$usernames</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp;<span class="co1">// if username is in our array then output the string &quot;0&quot;</span><br />
&nbsp; &nbsp;<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;0&quot;</span>;<br />
&nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp;<span class="co1">// if username is not in our array then output the string &quot;1&quot;</span><br />
&nbsp; &nbsp;<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;1&quot;</span>;<br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a>;<br />
&nbsp;<span class="br0">&#125;</span><br />
&nbsp;<br />
<span class="coMULTI">/*<br />
&nbsp;* Note: In a more realistic scenario, you will be checking<br />
&nbsp;* usernames against a database instead of just a predefined<br />
&nbsp;* array as in our example<br />
&nbsp;*/</span> <br />
<span class="co1">// *** END OF PHP PART ***</span><br />
<span class="kw2">?&gt;</span></p>
<p>&lt;!DOCTYPE html <span class="kw2">PUBLIC</span> <span class="st0">&quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span> <span class="st0">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;</span>&gt;<br />
&lt;html xmlns=<span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span>&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=<span class="st0">&quot;Content-Type&quot;</span> content=<span class="st0">&quot;text/html; charset=UTF-8&quot;</span> /&gt;<br />
&lt;title&gt;Check <span class="kw1">if</span> User Exists&lt;/title&gt;</p>
<p>
&lt;!&#8211; *** THE JAVASCRIPT PART *** &#8211;&gt;<br />
&lt;script type=<span class="st0">&quot;text/javascript&quot;</span>&gt;<br />
&lt;!&#8211; <span class="co1">// Javascript &#8211;&gt;</span></p>
<p><span class="coMULTI">/*<br />
&nbsp;* ajax_call function &#8211; this does the hard work<br />
&nbsp;* accepts three parameters:<br />
&nbsp;* &nbsp;url &#8211; the url of the server side script to call<br />
&nbsp;* &nbsp;callback_function &#8211; the function to call when data is retrieved from the server<br />
&nbsp;* &nbsp;error_function &#8211; the function to call when an error occurs<br />
&nbsp;*/</span><br />
<span class="kw2">function</span> ajax_call <span class="br0">&#40;</span>url, callback_function, error_function<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp;<span class="kw2">var</span> xmlHttp = <span class="kw2">null</span>;<br />
&nbsp;try <span class="br0">&#123;</span><br />
&nbsp; <span class="co1">// for standard browsers</span><br />
&nbsp; xmlHttp = <span class="kw2">new</span> XMLHttpRequest <span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp;<span class="br0">&#125;</span> catch <span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="co1">// for internet explorer</span><br />
&nbsp; try <span class="br0">&#123;</span><br />
&nbsp; &nbsp;xmlHttp = <span class="kw2">new</span> ActiveXObject <span class="br0">&#40;</span><span class="st0">&quot;Msxml2.XMLHTTP&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> catch <span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp;xmlHttp = <span class="kw2">new</span> ActiveXObject <span class="br0">&#40;</span><span class="st0">&quot;Microsoft.XMLHTTP&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
&nbsp;xmlHttp.onreadystatechange = <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>xmlHttp.readyState == <span class="nu0">4</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp;try <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>xmlHttp.status == <span class="nu0">200</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span class="co1">// we got the data, let&quot;s call the callback function</span><br />
&nbsp; &nbsp; &nbsp;callback_function <span class="br0">&#40;</span>xmlHttp.responseText<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp;<span class="br0">&#125;</span> catch <span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// oops we have an error, call the error function</span><br />
&nbsp; &nbsp; error_function <span class="br0">&#40;</span>e.description<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="co1">// open the url</span><br />
&nbsp; xmlHttp.open <span class="br0">&#40;</span><span class="st0">&quot;GET&quot;</span>, url<span class="br0">&#41;</span>;<br />
&nbsp; <span class="co1">// and send the data</span><br />
&nbsp; xmlHttp.send <span class="br0">&#40;</span><span class="kw2">null</span><span class="br0">&#41;</span>;<br />
&nbsp;<span class="br0">&#125;</span><br />
&nbsp;<br />
&nbsp;<span class="coMULTI">/*<br />
&nbsp; * this function is called for every keypress on our input field<br />
&nbsp; * it accepts one parameter &#8211; i &#8211; which is the object referencing<br />
&nbsp; * our input field<br />
&nbsp; */</span><br />
&nbsp;<span class="kw2">function</span> usercheck_init <span class="br0">&#40;</span>i<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp;<span class="kw2">var</span> obj = document.getElementById<span class="br0">&#40;</span><span class="st0">&quot;ajax_output&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp;obj.innerHTML = <span class="st0">&quot;&quot;</span>; <span class="co1">// &lt;- clear the status field</span><br />
&nbsp;<br />
&nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>i.value.length &lt; <span class="nu0">1</span><span class="br0">&#41;</span> <span class="kw1">return</span>;<br />
&nbsp;<br />
&nbsp; <span class="kw2">var</span> err = <span class="kw2">new</span> <a href="http://www.php.net/array"><span class="kw3">Array</span></a> <span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp;<span class="co1">// pre-ajax checks&#8230; let&quot;s check everything that we can check before calling ajax</span><br />
&nbsp;<span class="co1">// usernames can only contain letters, numbers and underscores</span><br />
&nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>i.value.match <span class="br0">&#40;</span>/<span class="br0">&#91;</span>^a-z0-9_<span class="br0">&#93;</span>/<span class="br0">&#41;</span><span class="br0">&#41;</span> err<span class="br0">&#91;</span>err.length<span class="br0">&#93;</span> = <span class="st0">&quot;Username can only contain letters, numbers and underscores&quot;</span>;<br />
&nbsp;<span class="co1">// usernames must be at least 8 characters long</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.value.length &lt; <span class="nu0">8</span><span class="br0">&#41;</span> err<span class="br0">&#91;</span>err.length<span class="br0">&#93;</span> = <span class="st0">&quot;Username too short&quot;</span>;</p>
<p>&nbsp;<span class="co1">// if we have a pre-ajax error, then show the error</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>err != <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp;obj.style.color = <span class="st0">&quot;#ff0000&quot;</span>;<br />
&nbsp; &nbsp;obj.innerHTML = err.<a href="http://www.php.net/join"><span class="kw3">join</span></a> <span class="br0">&#40;</span><span class="st0">&quot;&lt;br /&gt;&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;<span class="kw1">return</span>;<br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <br />
&nbsp; <span class="co1">// all pre-ajax checks passed? &nbsp;good, now let&quot;s do our ajax check</span><br />
&nbsp; ajax_call <span class="br0">&#40;</span><span class="st0">&quot;usercheck.php?u=&quot;</span> + i.value, usercheck_callback, usercheck_error<span class="br0">&#41;</span>; <br />
&nbsp;<span class="br0">&#125;</span><br />
&nbsp;<br />
&nbsp;<span class="coMULTI">/*<br />
&nbsp; * this is our callback function<br />
&nbsp; * all it does is check the data returned by the server<br />
&nbsp; * and decide on whether we show an error or not<br />
&nbsp; */</span><br />
&nbsp;<span class="kw2">function</span> usercheck_callback <span class="br0">&#40;</span>data<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="kw2">var</span> response = <span class="br0">&#40;</span>data == <span class="st0">&quot;1&quot;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; <span class="kw2">var</span> obj = document.getElementById<span class="br0">&#40;</span><span class="st0">&quot;ajax_output&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; obj.style.color = <span class="br0">&#40;</span>response<span class="br0">&#41;</span> ? <span class="st0">&quot;#008800&quot;</span> : <span class="st0">&quot;#ff0000&quot;</span>;<br />
&nbsp; obj.innerHTML = <span class="br0">&#40;</span>response == <span class="st0">&quot;1&quot;</span><span class="br0">&#41;</span> ? <span class="st0">&quot;Username OK&quot;</span> : <span class="st0">&quot;Username already taken&quot;</span>;<br />
&nbsp;<span class="br0">&#125;</span><br />
&nbsp;<span class="coMULTI">/*<br />
&nbsp; * this is our error function<br />
&nbsp; * all it does is pop an alert box showing the error<br />
&nbsp; */</span><br />
&nbsp;<span class="kw2">function</span> usercheck_error <span class="br0">&#40;</span>err<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; alert <span class="br0">&#40;</span><span class="st0">&quot;Error: &quot;</span> + err<span class="br0">&#41;</span>;<br />
&nbsp;<span class="br0">&#125;</span><br />
<span class="kw2">&lt;/script&gt;</span><br />
&lt;!&#8211; <a href="http://www.php.net/end"><span class="kw3">END</span></a> OF THE JAVASCRIPT PART &#8211;&gt;</p>
<p>&lt;/head&gt;<br />
&lt;body&gt;</p>
<p>&lt;!&#8211; THE FORM &#8211;&gt;<br />
&lt;form method=<span class="st0">&quot;post&quot;</span> onsubmit=<span class="st0">&quot;return false&quot;</span>&gt;<br />
&nbsp;&lt;dl&gt;<br />
&nbsp; &lt;dt&gt;Username&lt;/dt&gt;<br />
&nbsp; &lt;dd&gt;<br />
&nbsp; &nbsp;&lt;input type=<span class="st0">&quot;text&quot;</span> name=<span class="st0">&quot;username&quot;</span> value=<span class="st0">&quot;&quot;</span> onkeyup=<span class="st0">&quot;usercheck_init (this)&quot;</span> /&gt;<br />
&nbsp; &nbsp;&lt;div id=<span class="st0">&quot;ajax_output&quot;</span>&gt;&lt;/div&gt;<br />
&nbsp; &lt;/dd&gt;<br />
&nbsp;&lt;/dl&gt;<br />
&lt;/form&gt;<br />
&lt;!&#8211; <a href="http://www.php.net/end"><span class="kw3">END</span></a> OF THE FORM &#8211;&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;</div>
<p>Here&#8217;s how it works:</p>
<p>Existing users are: administrator, peterpiper, peterpan, and superman.<br />
<iframe src='http://coderscult.com/wp-content/uploads/2008/03/usercheck.php' title='usercheck.php' style='width:80%'><a href='http://coderscult.com/wp-content/uploads/2008/03/usercheck.php' title='usercheck.php' target='_blank'>View Sample</a></iframe></p>
<p><a href='http://coderscult.com/wp-content/uploads/2008/03/usercheck.zip' title='Download usercheck.zip - AJAX Username Validation'>Download usercheck.zip &#8211; AJAX Username Validation</a></p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this Post through Social Bookmarking</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-username-validation%2F&amp;title=AJAX%20Username%20Validation&amp;bodytext=Form%20input%20validation%20is%20sometimes%20an%20annoying%20part%20in%20web%20development%20but%20it%27s%20something%20that%20we%20web%20developers%20can%27t%20avoid.%20%20In%20order%20to%20make%20sure%20that%20the%20data%20being%20entered%20by%20our%20users%20are%20valid%2C%20we%20simply%20have%20to%20validate.%20%20Another%20good%20use%20of%20" title="Digg"><img src="http://coderscult.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-username-validation%2F" title="Sphinn"><img src="http://coderscult.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-username-validation%2F&amp;title=AJAX%20Username%20Validation&amp;notes=Form%20input%20validation%20is%20sometimes%20an%20annoying%20part%20in%20web%20development%20but%20it%27s%20something%20that%20we%20web%20developers%20can%27t%20avoid.%20%20In%20order%20to%20make%20sure%20that%20the%20data%20being%20entered%20by%20our%20users%20are%20valid%2C%20we%20simply%20have%20to%20validate.%20%20Another%20good%20use%20of%20" title="del.icio.us"><img src="http://coderscult.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-username-validation%2F&amp;t=AJAX%20Username%20Validation" title="Facebook"><img src="http://coderscult.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.mixx.com/submit?page_url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-username-validation%2F&amp;title=AJAX%20Username%20Validation" title="Mixx"><img src="http://coderscult.com/wp-content/plugins/sociable/images/mixx.png" title="Mixx" alt="Mixx" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-username-validation%2F&amp;title=AJAX%20Username%20Validation&amp;annotation=Form%20input%20validation%20is%20sometimes%20an%20annoying%20part%20in%20web%20development%20but%20it%27s%20something%20that%20we%20web%20developers%20can%27t%20avoid.%20%20In%20order%20to%20make%20sure%20that%20the%20data%20being%20entered%20by%20our%20users%20are%20valid%2C%20we%20simply%20have%20to%20validate.%20%20Another%20good%20use%20of%20" title="Google Bookmarks"><img src="http://coderscult.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-username-validation%2F&amp;title=AJAX%20Username%20Validation" title="StumbleUpon"><img src="http://coderscult.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-username-validation%2F" title="Technorati"><img src="http://coderscult.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="" title="YahooMyWeb"><img src="http://coderscult.com/wp-content/plugins/sociable/images/" title="YahooMyWeb" alt="YahooMyWeb" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://coderscult.com/javascript-ajax/2008/03/17/ajax-username-validation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX Introduction</title>
		<link>http://coderscult.com/javascript-ajax/2008/03/17/ajax-introduction/</link>
		<comments>http://coderscult.com/javascript-ajax/2008/03/17/ajax-introduction/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 20:25:46 +0000</pubDate>
		<dc:creator>Mike Lopez</dc:creator>
				<category><![CDATA[Javascript/AJAX]]></category>

		<guid isPermaLink="false">http://coderscult.com/javascriptajax/2008/03/17/ajax-introduction/</guid>
		<description><![CDATA[Ever wondered what AJAX is?  AJAX stands for Asynchronous JavaScript and XML.  It is not a programming language in itself but rather a combination of different web development techniques.  Furthermore, AJAX technology is not new though it has only been popularized recently especially by Google (Google Maps, GMail, Google Calendar, etc.)

At the [...]]]></description>
			<content:encoded><![CDATA[<p>Ever wondered what AJAX is?  AJAX stands for Asynchronous JavaScript and XML.  It is not a programming language in itself but rather a combination of different web development techniques.  Furthermore, AJAX technology is not new though it has only been popularized recently especially by Google (Google Maps, GMail, Google Calendar, etc.)</p>
<p><span id="more-14"></span></p>
<p>At the heart of AJAX is JavaScript&#8217;s XMLHttpRequest Object.  It is through this object that the browser asynchronously sends a request to the server thereby eliminating the need for a page reload.  Without AJAX, the typical flow would be:</p>
<ol>
<li>User enters data into a field</li>
<li>User presses submit button</li>
<li>Browser sends form data to server and waits for a response</li>
<li>Server responds back with an entire page</li>
<li>Browser shows the returned page from the server</li>
</ol>
<p>While the above approach works and is still being used by lots of websites, it is pretty cumbersome for the server and for the browser thereby taking more time.  With AJAX, the flow would be</p>
<ol>
<li>User enters data into a field</li>
<li>User presses submit button</li>
<li>XMLHttpRequest sends data to server asynchronously</li>
<li>Server responds back only with the data needed and not the entire page</li>
<li>Javascript updates the sections of the page that only needs to be updated</li>
</ol>
<p>While there are the same number of steps, the browser and especially the server only process data that needs to be processed and eliminates the need of an entire page reload.  But how is it done?</p>
<p>There are many AJAX libraries available that simplifies things allowing the programmer to focus on the more important things to be done.  You may use those and things will work just the same but since the purpose of this article is to introduce you to AJAX, allow me to show you my simple little function that handles all my AJAX needs.</p>
<div class="dean_ch" style="white-space: wrap;"> <span class="coMULTI">/*<br />
&nbsp;* ajax_call function &#8211; this does the hard work<br />
&nbsp;* accepts three parameters:<br />
&nbsp;* &nbsp;url &#8211; the url of the server side script to call<br />
&nbsp;* &nbsp;callback_function &#8211; the function to call when data is retrieved from the server<br />
&nbsp;* &nbsp;error_function &#8211; the function to call when an error occurs<br />
&nbsp;*/</span><br />
<span class="kw2">function</span> ajax_call <span class="br0">&#40;</span>url, callback_function, error_function<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp;<span class="kw2">var</span> xmlHttp = <span class="kw2">null</span>;<br />
&nbsp;<span class="kw1">try</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="co1">// for standard browsers</span><br />
&nbsp; xmlHttp = <span class="kw2">new</span> XMLHttpRequest <span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp;<span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="co1">// for internet explorer</span><br />
&nbsp; <span class="kw1">try</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp;xmlHttp = <span class="kw2">new</span> ActiveXObject <span class="br0">&#40;</span><span class="st0">&quot;Msxml2.XMLHTTP&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp;xmlHttp = <span class="kw2">new</span> ActiveXObject <span class="br0">&#40;</span><span class="st0">&quot;Microsoft.XMLHTTP&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
&nbsp;xmlHttp.<span class="me1">onreadystatechange</span> = <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>xmlHttp.<span class="me1">readyState</span> == <span class="nu0">4</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp;<span class="kw1">try</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>xmlHttp.<span class="kw3">status</span> == <span class="nu0">200</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span class="co1">// we got the data, let&#8217;s call the callback function</span><br />
&nbsp; &nbsp; &nbsp;callback_function <span class="br0">&#40;</span>xmlHttp.<span class="me1">responseText</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp;<span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// oops we have an error, call the error function</span><br />
&nbsp; &nbsp; error_function <span class="br0">&#40;</span>e.<span class="me1">description</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="co1">// open the url</span><br />
&nbsp; xmlHttp.<span class="kw3">open</span> <span class="br0">&#40;</span><span class="st0">&quot;GET&quot;</span>, url<span class="br0">&#41;</span>;<br />
&nbsp; <span class="co1">// and send the data</span><br />
&nbsp; xmlHttp.<span class="me1">send</span> <span class="br0">&#40;</span><span class="kw2">null</span><span class="br0">&#41;</span>;<br />
&nbsp;<span class="br0">&#125;</span></div>
<p>The function is pretty self-explanatory so I won&#8217;t explain every line here (I&#8217;m feeling lazy).  Note that this function only handles GET requests and does not handle POST but it can be easily modified to handle POST as well.  I&#8217;ll leave that to you.  Using it is pretty simple.  Here&#8217;s an example:</p>
<div class="dean_ch" style="white-space: wrap;"> <span class="coMULTI">/*<br />
&nbsp; * first we create a callback function to process the returned data<br />
&nbsp; * in this example, we&#8217;ll just show the data in an alert box<br />
&nbsp; */</span><br />
&nbsp;<span class="kw2">function</span> fxn_callback <span class="br0">&#40;</span>data<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="kw3">alert</span> <span class="br0">&#40;</span>data<span class="br0">&#41;</span>;<br />
&nbsp;<span class="br0">&#125;</span></p>
<p>&nbsp;<span class="coMULTI">/*<br />
&nbsp; * for error handling, we specify an error handler which simply<br />
&nbsp; * shows an alert box containing a description of the error<br />
&nbsp; */</span><br />
&nbsp;<span class="kw2">function</span> fxn_error <span class="br0">&#40;</span>err<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="kw3">alert</span> <span class="br0">&#40;</span><span class="st0">&quot;Error: &quot;</span> + err<span class="br0">&#41;</span>;<br />
&nbsp;<span class="br0">&#125;</span></p>
<p>&nbsp;<span class="coMULTI">/*<br />
&nbsp; * then we call our ajax function passing three parameters<br />
&nbsp; * the url &#8211; in this case a plain text file<br />
&nbsp; * the callback function<br />
&nbsp; * and our error function<br />
&nbsp; */</span><br />
&nbsp;ajax_call <span class="br0">&#40;</span><span class="st0">&quot;somefile.txt&quot;</span>, fxn_callback, fxn_error<span class="br0">&#41;</span>;</div>
<p>As you can see, it&#8217;s pretty simple.  Also you may notice that we&#8217;re just returning a text file instead of an XML file.  Well, that&#8217;s the beauty of it.  XMLHttpRequest will return exactly what the server gave it back &#8211; XML, HTML, or just plain text and it&#8217;s up to your callback function to process that data.  In my case, I prefer returning data in plain text so my server side script (PHP in this case) looks something like this.</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw2">&lt;?php</span><br />
<span class="co1">// do some work here based on the data passed to us via GET &#8230;</span><br />
<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;our return value&quot;</span>;<br />
<a href="http://www.php.net/exit"><span class="kw3">exit</span></a>;<br />
<span class="kw2">?&gt;</span></div>
<p>See how I echo the return value in my PHP script?  That&#8217;s important because what&#8217;s been echoed in my PHP script is the data that will be returned to our AJAX function.  Also, I added <strong>&#8220;exit;&#8221;</strong> at the end of my script to make sure that no extra data will be sent back.</p>
<p>To sum it all up&#8230; AJAX is not new &#8211; it&#8217;s been there for a while but rather untapped by the majority of web developers.  AJAX is pretty easy to understand because it&#8217;s not a new programming language.  It&#8217;s just plain old Javascript.  Lastly, AJAX can process both XML and plain text data, it&#8217;s really up to you to choose.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this Post through Social Bookmarking</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-introduction%2F&amp;title=AJAX%20Introduction&amp;bodytext=Ever%20wondered%20what%20AJAX%20is%3F%20%20AJAX%20stands%20for%20Asynchronous%20JavaScript%20and%20XML.%20%20It%20is%20not%20a%20programming%20language%20in%20itself%20but%20rather%20a%20combination%20of%20different%20web%20development%20techniques.%20%20Furthermore%2C%20AJAX%20technology%20is%20not%20new%20though%20it%20has%20only%20be" title="Digg"><img src="http://coderscult.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-introduction%2F" title="Sphinn"><img src="http://coderscult.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-introduction%2F&amp;title=AJAX%20Introduction&amp;notes=Ever%20wondered%20what%20AJAX%20is%3F%20%20AJAX%20stands%20for%20Asynchronous%20JavaScript%20and%20XML.%20%20It%20is%20not%20a%20programming%20language%20in%20itself%20but%20rather%20a%20combination%20of%20different%20web%20development%20techniques.%20%20Furthermore%2C%20AJAX%20technology%20is%20not%20new%20though%20it%20has%20only%20be" title="del.icio.us"><img src="http://coderscult.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-introduction%2F&amp;t=AJAX%20Introduction" title="Facebook"><img src="http://coderscult.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.mixx.com/submit?page_url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-introduction%2F&amp;title=AJAX%20Introduction" title="Mixx"><img src="http://coderscult.com/wp-content/plugins/sociable/images/mixx.png" title="Mixx" alt="Mixx" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-introduction%2F&amp;title=AJAX%20Introduction&amp;annotation=Ever%20wondered%20what%20AJAX%20is%3F%20%20AJAX%20stands%20for%20Asynchronous%20JavaScript%20and%20XML.%20%20It%20is%20not%20a%20programming%20language%20in%20itself%20but%20rather%20a%20combination%20of%20different%20web%20development%20techniques.%20%20Furthermore%2C%20AJAX%20technology%20is%20not%20new%20though%20it%20has%20only%20be" title="Google Bookmarks"><img src="http://coderscult.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-introduction%2F&amp;title=AJAX%20Introduction" title="StumbleUpon"><img src="http://coderscult.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fcoderscult.com%2Fjavascript-ajax%2F2008%2F03%2F17%2Fajax-introduction%2F" title="Technorati"><img src="http://coderscult.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="" title="YahooMyWeb"><img src="http://coderscult.com/wp-content/plugins/sociable/images/" title="YahooMyWeb" alt="YahooMyWeb" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://coderscult.com/javascript-ajax/2008/03/17/ajax-introduction/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
