<?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>A Better Way &#187; ajax</title>
	<atom:link href="http://www.thejacklawson.com/index.php/tag/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thejacklawson.com</link>
	<description>Finding a better way to get things done, a technical journey</description>
	<lastBuildDate>Wed, 21 Jul 2010 14:36:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Tracking AJAX in ASP.NET with Google Analytics</title>
		<link>http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/</link>
		<comments>http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 02:00:36 +0000</pubDate>
		<dc:creator>Jack Lawson</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[web trending]]></category>

		<guid isPermaLink="false">http://www.thejacklawson.com/?p=102</guid>
		<description><![CDATA[Image by carveconsulting via Flickr (skip down a little further if you don&#8217;t need an introduction to Google Analytics.) I love Google Analytics. In fact, I&#8217;m a big fan of Google as a whole, and I do the majority of my work using Google Docs, Calendar, and Gmail (online collaboration! oh, and free) and Google [...]]]></description>
			<content:encoded><![CDATA[<div class="zemanta-img" style="margin: 1em; display: block;">
<div>
<dl class="wp-caption alignright" style="width: 250px;">
<dt class="wp-caption-dt"><a href="http://www.flickr.com/photos/76347018@N00/2290586287"><img title="Google analytics for recruitment" src="http://farm4.static.flickr.com/3243/2290586287_6c02972b60_m.jpg" alt="Google analytics for recruitment" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image by <a href="http://www.flickr.com/photos/76347018@N00/2290586287">carveconsulting</a> via Flickr</dd>
</dl>
</div>
</div>
<p><em>(skip down a little further if you don&#8217;t need an introduction to <a class="zem_slink" title="Google Analytics" rel="homepage" href="http://www.google.com/analytics">Google Analytics</a>.)</em></p>
<p>I love <a class="zem_slink" title="Google" rel="homepage" href="http://google.com">Google</a> Analytics. In fact, I&#8217;m a big fan of Google as a whole, and I do the majority of my work using Google <a class="zem_slink" title="Google Docs" rel="homepage" href="http://docs.google.com/">Docs</a>, <a class="zem_slink" title="Google Calendar" rel="homepage" href="http://google.com/calendar">Calendar</a>, and Gmail (online collaboration! oh, and free) and Google Analytics is a beautiful tool for businesses, whether their <a class="zem_slink" title="Website" rel="wikipedia" href="http://en.wikipedia.org/wiki/Website">website</a>&#8216;s primary focus is online sales or just a small info-about-my-business site. If you don&#8217;t have some kind of tracking, you&#8217;re missing out on very important information; GA is a good place to start. Anybody can put GA into their website, and everybody should put something in.</p>
<p>The way GA works is by dropping a snippet of <a class="zem_slink" title="JavaScript" rel="wikipedia" href="http://en.wikipedia.org/wiki/JavaScript">Javascript</a> into your page; this javascript runs a series of tests against the visitor&#8217;s browser, checking <a class="zem_slink" title="Display resolution" rel="wikipedia" href="http://en.wikipedia.org/wiki/Display_resolution">screen resolution</a>, flash capabilities, seeing if the user is unique, watching the user&#8217;s path through the website, checking the user&#8217;s location, and much, much more (all collected anonymously). This is all put into an interface where you can see the data collected and organized. However, <a class="zem_slink" title="Ajax (programming)" rel="wikipedia" href="http://en.wikipedia.org/wiki/Ajax_%28programming%29">AJAX</a> applications don&#8217;t function as normal websites- you don&#8217;t get a new <a class="zem_slink" title="Hit (internet)" rel="wikipedia" href="http://en.wikipedia.org/wiki/Hit_%28internet%29">page hit</a> every time you fire off an UpdatePanel, because it&#8217;s not a full page refresh. So, we need to do a little trickery to get things to work the way we want them to.</p>
<p><em>(you can start reading again if you skipped earlier.)</em></p>
<p>If you have the Google Analytics in the host page (whether the aspx page, or more likely, the master page), then you have to register a client script block that calls the trackpageview method. If you use <a class="zem_slink" title="JQuery" rel="homepage" href="http://jquery.com/">jQuery</a>, it&#8217;ll look something like:</p>
<p><code>ScriptManager.RegisterClientScriptBlock(UpdatePanelID, typeof(UpdatePanel), "uniqueIdentifierString", "$(document).ready(function(){ pageTracker._trackPageview('/pagename'); });", true);</code></p>
<p>If you&#8217;re not using jQuery, you&#8217;ll have to do a little more work to attach to the window&#8217;s onload event, but it&#8217;s pretty similar.<br />
What you&#8217;re doing is registering a script block to execute when the UpdatePanel updates (because it won&#8217;t execute JS returned in the text), and using the pageTracker object (that the GA code you copied when you first set up GA on your site created) to force a pageview for a page you define. For my applications, I generally use something like &#8220;/dataentry/guestbook/edit&#8221; or &#8220;/dataentry/guestbook/delete&#8221; so that I can easily track guestbook views, as well as edits / deletes. It&#8217;s both a way to track controls you load via AJAX, and a cheap shot at logging (not perfect data, though, so you&#8217;re still best off doing all of your own logging on events, of course.)</p>
<p>The official Google help doc on the subject is also here: <a href="http://www.google.com/support/analytics/bin/answer.py?hl=en&amp;answer=55519" target="_blank">http://www.google.com/support/analytics/bin/answer.py?hl=en&amp;answer=55519</a></p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/570dfef3-4261-4739-9d63-560430307e2b/"><img class="zemanta-pixie-img" style="border: medium none ; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=570dfef3-4261-4739-9d63-560430307e2b" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em> </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/&amp;title=Tracking+AJAX+in+ASP.NET+with+Google+Analytics" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Del.icio.us"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Del.icio.us" alt="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/&amp;title=Tracking+AJAX+in+ASP.NET+with+Google+Analytics" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to digg"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to digg" alt="Add 'Tracking AJAX in ASP.NET with Google Analytics' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/&amp;title=Tracking+AJAX+in+ASP.NET+with+Google+Analytics" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to reddit"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to reddit" alt="Add 'Tracking AJAX in ASP.NET with Google Analytics' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Technorati"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Technorati" alt="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/&amp;h=Tracking+AJAX+in+ASP.NET+with+Google+Analytics" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Newsvine"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/newsvine.png" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Newsvine" alt="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Newsvine" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/&amp;title=Tracking+AJAX+in+ASP.NET+with+Google+Analytics" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Stumble Upon"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Stumble Upon" alt="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/&amp;title=Tracking+AJAX+in+ASP.NET+with+Google+Analytics" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Google Bookmarks"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/google.png" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Google Bookmarks" alt="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="https://favorites.live.com/quickadd.aspx?url=http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/&amp;title=Tracking+AJAX+in+ASP.NET+with+Google+Analytics" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Live-MSN"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/live.png" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Live-MSN" alt="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Live-MSN" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?title=Tracking+AJAX+in+ASP.NET+with+Google+Analytics&amp;url=http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to SlashDot"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/slashdot.png" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to SlashDot" alt="Add 'Tracking AJAX in ASP.NET with Google Analytics' to SlashDot" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/&amp;t=Tracking+AJAX+in+ASP.NET+with+Google+Analytics" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to FaceBook"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to FaceBook" alt="Add 'Tracking AJAX in ASP.NET with Google Analytics' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Twitter"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Twitter" alt="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Twitter" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/reader/link?url=http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/&amp;title=Tracking+AJAX+in+ASP.NET+with+Google+Analytics&amp;srcURL=http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Google Buzz"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/googlebuzz.png" title="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Google Buzz" alt="Add 'Tracking AJAX in ASP.NET with Google Analytics' to Google Buzz" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://www.thejacklawson.com/index.php/2009/09/tracking-ajax-in-asp-net-with-google-analytics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript Prototyping, an Adventure</title>
		<link>http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/</link>
		<comments>http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/#comments</comments>
		<pubDate>Sun, 10 Aug 2008 23:37:21 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://www.thejacklawson.com/?p=21</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>Lately, I&#8217;ve more or less been the go-to guy at work for Javascript issues. Several times daily, I&#8217;ve been helping other people out with Javascript (something I like to do; keeps me sharpened on the art of browser scripting), whether it be an issue with Ajax or something strange with variable initialization (check that your variable&#8217;s not a keyword! make sure the src is set correctly!). So there I was, thinking myself somewhat of an expert on the subject, as my ego has a habit to coerce me into, until I came upon the Javascript &#8220;prototype&#8221;. Not to be confused with the <a href="http://www.prototypejs.org/">popular Javasript framework</a>, but rather a method to add methods to objects. Essentially, it is a plausible way to extend current objects and really use Javascript as an object-oriented language. And what with my affinity towards C#, this was perfect.</p>
<p>I decided that I&#8217;d first start with my Ajax framework, DeviantAjax. The framework was something I started a while back, beginning with <a href="http://gevalum.com/jsfiles/AJAXFun.js">Gevalum&#8217;s rudimentary system</a>; I took the few base functions and threw them nicely in a file with comments. However, this wasn&#8217;t exactly anything new or groundbreaking; I wanted to put out a framework that was simple and easy (KISS), but still offered more than any wizened developer could throw together in a matter of minutes.</p>
<p><span class="caps">DA, </span>as we&#8217;ll call it from here on out, would be different than the other frameworks (the three that come to mind are <a href="http://script.aculo.us/">script.aculo.us</a>, <a href="http://www.prototypejs.org/">Prototype</a>, and <a href="http://jquery.com/">jQuery</a>). It wouldn&#8217;t include all of the animation stuff and all the extra <span class="caps">DOM </span>code of the others; rather, it&#8217;d be for Ajax alone. It&#8217;d be a way for beginners to use the magic and a way for gurus to get a head start on a project.</p>
<p>So, first things first: I began with a Page object. Pleased with this, I began to add things into it&#8217;s prototype, like so:</p>
<blockquote><p>function Page() {<br />&nbsp;&nbsp;&nbsp; ajaxes = new Array();<br />}</p>
<p>Page.prototype = {<br />&nbsp;&nbsp;&nbsp; SetAjaxRequestMax: function(ajaxObjectsToCreate){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230;<br />&nbsp;&nbsp;&nbsp; },<br />&nbsp;&nbsp;&nbsp; FillElement: function (element,source,postData,ajaxObjectIndex){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230;<br />&nbsp;&nbsp;&nbsp; }<br />}</p></blockquote>
<p>Excellent! I could make a new page &#8211; var MyPage = new Page(); &#8211; and it looked like good ol&#8217; C# (well, close enough, anyway.) I could even call MyPage.SetAjaxRequestMax(4)! And that was great, except now I wanted to add functions to FillElement. So, I added a FillElement.prototype block inside of my FillElement, with functions like Set, OnLoad, OnRequestOK, and OnRequestBad. Except&#8230; prototype doesn&#8217;t quite work like that. You can&#8217;t put the prototype declaration inside the FillElement function, as I found out after several hours.</p>
<p>So, instead, the framework began to look more like:</p>
<p></p>
<blockquote><p>_ajaxObjectArray = new Array();</p>
<p>function Page() {<br />&nbsp;&nbsp;&nbsp; <br />}</p>
<p>function EvalAjaxPost(){};<br />function SetAjaxRequestMax(){};</p>
<p>SetAjaxRequestMax.prototype = {<br />&nbsp;&nbsp;&nbsp; Set: function(ajaxObjectsToCreate){<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(window.XMLHttpRequest){<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(x=0; x&lt;ajaxObjectsToCreate; x++){<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; _ajaxObjectArray[x] = new <span class="caps">XMLH</span>ttpRequest();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }else if(window.ActiveXObject){<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(x=0; x&lt;ajaxObjectsToCreate; x++){<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; _ajaxObjectArray[x] = new ActiveXObject(&#8220;Microsoft.XMLHTTP&#8221;);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />};</p>
<p>FillElement.prototype = {<br />&nbsp;&nbsp;&nbsp; Post: function(element,source,postData,ajaxObjectIndex){<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &#8230;<br />&nbsp;&nbsp;&nbsp; },<br />&nbsp;&nbsp;&nbsp; &#8230;<br />}</p></blockquote>
<p>Page.prototype.SetAjaxRequestMax = new SetAjaxRequestMax();<br />Page.prototype.FillElement = new FillElement();</p>
<p>Now it started working better. I&#8217;d set the AjaxRequestMax on the <span class="caps">HTML </span>file it was used in, and then I could initialize and use FillElement objects- FillElement.Post(&#8220;div1&#8243;,&#8230;);. Cool.</p>
<p>So, the purpose of prototype, and how it works:<br />Prototype is a way to add methods onto objects. For example, you could add functions onto strings, like so:</p>
<blockquote><p>function Reverse(){<br />&nbsp;&nbsp;&nbsp; for (n=this.length-1;n&gt;=0;n&#8211;){<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; document.write(this.charAt(n))<br />&nbsp;&nbsp;&nbsp; }<br />}<br />String.prototype.writeback=Reverse();</p></blockquote>
<p>And use it like &#8220;jack&#8221;.Reverse(); and get a result. It&#8217;s <a href="http://www.codinghorror.com/blog/archives/001151.html">Monkeypatching</a> at it&#8217;s best. It also really lends itself to OO Javascript development, which is always a plus.</p>
<p>The next thing I&#8217;m trying to figure out is how to get other functions in the prototype (OnRequestOK, for example) to run on the FillElement object when I run Post and get a certain result. Feel free to leave any ideas in the comments, and otherwise I&#8217;ll be posting part 2 soon.</p>
<p>Check out my <a href="http://crimsondeviations.com/sharedjavascript/Ajax/test.html">testing</a> page (which may or may not be broken, if I&#8217;m working on it) and the <a href="http://crimsondeviations.com/sharedjavascript/Ajax/DeviantAjax.rar">zip</a> file for yourself; it&#8217;s creative commons licensing, so do whatever you want. </p>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em> </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/&amp;title=Javascript+Prototyping%2C+an+Adventure" title="Add 'Javascript Prototyping, an Adventure' to Del.icio.us"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'Javascript Prototyping, an Adventure' to Del.icio.us" alt="Add 'Javascript Prototyping, an Adventure' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/&amp;title=Javascript+Prototyping%2C+an+Adventure" title="Add 'Javascript Prototyping, an Adventure' to digg"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'Javascript Prototyping, an Adventure' to digg" alt="Add 'Javascript Prototyping, an Adventure' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/&amp;title=Javascript+Prototyping%2C+an+Adventure" title="Add 'Javascript Prototyping, an Adventure' to reddit"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'Javascript Prototyping, an Adventure' to reddit" alt="Add 'Javascript Prototyping, an Adventure' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/" title="Add 'Javascript Prototyping, an Adventure' to Technorati"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'Javascript Prototyping, an Adventure' to Technorati" alt="Add 'Javascript Prototyping, an Adventure' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/&amp;h=Javascript+Prototyping%2C+an+Adventure" title="Add 'Javascript Prototyping, an Adventure' to Newsvine"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/newsvine.png" title="Add 'Javascript Prototyping, an Adventure' to Newsvine" alt="Add 'Javascript Prototyping, an Adventure' to Newsvine" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/&amp;title=Javascript+Prototyping%2C+an+Adventure" title="Add 'Javascript Prototyping, an Adventure' to Stumble Upon"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'Javascript Prototyping, an Adventure' to Stumble Upon" alt="Add 'Javascript Prototyping, an Adventure' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/&amp;title=Javascript+Prototyping%2C+an+Adventure" title="Add 'Javascript Prototyping, an Adventure' to Google Bookmarks"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/google.png" title="Add 'Javascript Prototyping, an Adventure' to Google Bookmarks" alt="Add 'Javascript Prototyping, an Adventure' to Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="https://favorites.live.com/quickadd.aspx?url=http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/&amp;title=Javascript+Prototyping%2C+an+Adventure" title="Add 'Javascript Prototyping, an Adventure' to Live-MSN"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/live.png" title="Add 'Javascript Prototyping, an Adventure' to Live-MSN" alt="Add 'Javascript Prototyping, an Adventure' to Live-MSN" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?title=Javascript+Prototyping%2C+an+Adventure&amp;url=http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/" title="Add 'Javascript Prototyping, an Adventure' to SlashDot"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/slashdot.png" title="Add 'Javascript Prototyping, an Adventure' to SlashDot" alt="Add 'Javascript Prototyping, an Adventure' to SlashDot" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/&amp;t=Javascript+Prototyping%2C+an+Adventure" title="Add 'Javascript Prototyping, an Adventure' to FaceBook"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'Javascript Prototyping, an Adventure' to FaceBook" alt="Add 'Javascript Prototyping, an Adventure' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/" title="Add 'Javascript Prototyping, an Adventure' to Twitter"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'Javascript Prototyping, an Adventure' to Twitter" alt="Add 'Javascript Prototyping, an Adventure' to Twitter" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/reader/link?url=http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/&amp;title=Javascript+Prototyping%2C+an+Adventure&amp;srcURL=http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/" title="Add 'Javascript Prototyping, an Adventure' to Google Buzz"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/googlebuzz.png" title="Add 'Javascript Prototyping, an Adventure' to Google Buzz" alt="Add 'Javascript Prototyping, an Adventure' to Google Buzz" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://www.thejacklawson.com/index.php/2008/08/javascript-prototyping-an-adventure/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>n-Tiered AJAX</title>
		<link>http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/</link>
		<comments>http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/#comments</comments>
		<pubDate>Mon, 04 Feb 2008 18:39:06 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.thejacklawson.com/?p=5</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><span style="font-style: italic;">n</span>-Tiered AJAX is one of my my<br />
favorite development architectures. It&#8217;s how I developed Gevalum, and<br />
it&#8217;s how I&#8217;ll develop every website to come that has to touch a<br />
database, but doesn&#8217;t require a full-scale ASP.NET application<br />
platform. It&#8217;s fast, it&#8217;s scalable, and in the end, you&#8217;ve got one<br />
sweet site with amazing processing efficiency and <span style="font-style: italic;">pizazz</span>. It&#8217;s a pretty simple idea. This is how I develop:</p>
<p>First<br />
off: make a mockup of the design. Figure out what you want it to look<br />
like; draw it up in Photoshop, or write up the CSS in notepad, or<br />
however you&#8217;re doing what you do. Make a note of every bit of static<br />
information, and every bit of dynamic information, and dump it all into<br />
DIV tags.</p>
<p>Next, after the interface tier, comes the big part:<br />
your JavaScript tier. There are three distinct parts to this, although<br />
you may only require two.</p>
<p>Part 1: your object layer. If you have<br />
things like I do (players, items, etc) you&#8217;ll want to make objects. An<br />
example would be a player object, with player.strength, player.health,<br />
player.level, player.name&#8230; etc. A variable for every bit of connected<br />
information on your page.</p>
<p>Part 2: your update layer. Make a<br />
library of functions for each bit of information that you update. Don&#8217;t<br />
directly call the AJAX here; update the objects you made, or use these<br />
as a wrapper to validate then call your AJAX functions. You&#8217;ll probably<br />
want to include some DOM functions like:</p>
<p>function $(div){<br />   return document.getElementById(div);<br />}</p>
<p>and interface updater functions like:</p>
<p>function updateStats(){<br />   $(&#8220;playerStr&#8221;).innerHTML = player.str;<br />   //etc for all other stats<br />}</p>
<p>and variable updater functions like:</p>
<p>function uSTR(newStr){<br />   player.str = newStr<br />}<br />and<br />
anything else that your page does. Try to keep everything seperated; at<br />
a minimum, I always have a dom.js, functions.js, and then finally<br />
AJAX.js. You&#8217;ll call your AJAX layer by using something like this:</p>
<p>function uSTR(){<br />   player.str = evalAJAXPost(&#8220;playerstats.php?stat=str&#8221;);<br />}</p>
<p>Part<br />
3: Your AJAX layer. These are the functions that use your server-side<br />
pages. You always want to separate these because they&#8217;re things you use<br />
over, and over, and over again. Another trick that I learned a while<br />
ago, is that if you have simultaneous updates (e.g. sending dynamic<br />
updates while requesting pages), make an array of AJAX objects, and<br />
pass each page request through a different object. I&#8217;ve found that<br />
there&#8217;s no need for more than two or three (even Gevalum only has<br />
seven, and that&#8217;s probably overkill.) This is an excerpt from Gevalum&#8217;s<br />
AJAXFun.js:</p>
<p>var ajaxes = new Array();<br />//if we&#8217;re FF<br />if(window.XMLHttpRequest){<br />   ajaxes[0] = new XMLHttpRequest();<br />   ajaxes[1] = new XMLHttpRequest();<br />       ajaxes[2] = new XMLHttpRequest();<br />      ajaxes[3] = new XMLHttpRequest();<br />      ajaxes[4] = new XMLHttpRequest();<br />      ajaxes[5] = new XMLHttpRequest();<br />      ajaxes[6] = new XMLHttpRequest();<br />//or, if we&#8217;re IE<br />}else if(window.ActiveXObject){<br />       ajaxes[0] = new ActiveXObject(&#8220;Microsoft.XMLHTTP&#8221;);<br />      ajaxes[1] = new ActiveXObject(&#8220;Microsoft.XMLHTTP&#8221;);<br />      ajaxes[2] = new ActiveXObject(&#8220;Microsoft.XMLHTTP&#8221;);<br />      ajaxes[3] = new ActiveXObject(&#8220;Microsoft.XMLHTTP&#8221;);<br />      ajaxes[4] = new ActiveXObject(&#8220;Microsoft.XMLHTTP&#8221;);<br />      ajaxes[5] = new ActiveXObject(&#8220;Microsoft.XMLHTTP&#8221;);<br />      ajaxes[6] = new ActiveXObject(&#8220;Microsoft.XMLHTTP&#8221;);<br />}</p>
<p>function evalAJAXHtml(source,nr){<br />       ajaxes[nr].open(&#8220;GET&#8221;,source,true);<br />      ajaxes[nr].onreadystatechange = function(){<br />             try{<br />                       if(ajaxes[nr].readyState==4){<br />                               if (ajaxes[nr].status == 200){<br />                                       eval(ajaxes[nr].responseText);<br />                               }<br />                       }<br />               }<br />               catch(e){<br />                       //Exception-bug in FF<br />       }<br />      }<br />       ajaxes[nr].send(null);<br />}</p>
<p>function evalpostAJAXHtml(source,datan,nr){<br />       ajaxes[nr].open(&#8220;POST&#8221;,source,true);<br />       ajaxes[nr].setRequestHeader(&#8220;Content-type&#8221;, &#8220;application/x-www-form-urlencoded&#8221;);<br />       ajaxes[nr].setRequestHeader(&#8220;Content-length&#8221;, datan.length);<br />       ajaxes[nr].setRequestHeader(&#8220;Connection&#8221;, &#8220;close&#8221;);<br />       ajaxes[nr].onreadystatechange = function(){<br />               try{<br />                      if(ajaxes[nr].readyState==4){<br />                               if (ajaxes[nr].status == 200){<br />                                       eval(ajaxes[nr].responseText);<br />                               }<br />                       }<br />               }<br />               catch(e){<br />                       //Exception-bug in FF<br />               }<br />       }<br />       ajaxes[nr].send(datan);<br />}</p>
<p>Now,<br />
for the server-side part of this AJAX tiered application. There are a<br />
thousand ways to do this, depending on personal taste; I choose PHP,<br />
since it&#8217;s lightweight. You could use ruby, or asp, or asp.net, or<br />
anything that outputs text. All I have to do is pull the information I<br />
need, and write out my JavaScript updater function, and I&#8217;m done.</p>
<p>You<br />
may be asking: why bother? Well, the easiest is that it&#8217;s the absolute<br />
fastest way to get information securely from a database to the client.<br />
It sends the minimum information possible, and so saves you bandwidth.<br />
It&#8217;s invaluable for a little hosted server, or if you&#8217;re hosting<br />
yourself and can&#8217;t afford a business-class internet line. Not to<br />
mention, it&#8217;s faster on the user&#8217;s end, so they wait less, making them<br />
less likely to turn away from some lag-o-licious old monolith of a<br />
website. It&#8217;s streamlined, it&#8217;s dynamic; what else could you ask for?</p>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em> </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/&amp;title=n-Tiered+AJAX" title="Add 'n-Tiered AJAX' to Del.icio.us"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'n-Tiered AJAX' to Del.icio.us" alt="Add 'n-Tiered AJAX' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/&amp;title=n-Tiered+AJAX" title="Add 'n-Tiered AJAX' to digg"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'n-Tiered AJAX' to digg" alt="Add 'n-Tiered AJAX' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/&amp;title=n-Tiered+AJAX" title="Add 'n-Tiered AJAX' to reddit"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'n-Tiered AJAX' to reddit" alt="Add 'n-Tiered AJAX' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/" title="Add 'n-Tiered AJAX' to Technorati"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'n-Tiered AJAX' to Technorati" alt="Add 'n-Tiered AJAX' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/&amp;h=n-Tiered+AJAX" title="Add 'n-Tiered AJAX' to Newsvine"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/newsvine.png" title="Add 'n-Tiered AJAX' to Newsvine" alt="Add 'n-Tiered AJAX' to Newsvine" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/&amp;title=n-Tiered+AJAX" title="Add 'n-Tiered AJAX' to Stumble Upon"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'n-Tiered AJAX' to Stumble Upon" alt="Add 'n-Tiered AJAX' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/&amp;title=n-Tiered+AJAX" title="Add 'n-Tiered AJAX' to Google Bookmarks"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/google.png" title="Add 'n-Tiered AJAX' to Google Bookmarks" alt="Add 'n-Tiered AJAX' to Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="https://favorites.live.com/quickadd.aspx?url=http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/&amp;title=n-Tiered+AJAX" title="Add 'n-Tiered AJAX' to Live-MSN"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/live.png" title="Add 'n-Tiered AJAX' to Live-MSN" alt="Add 'n-Tiered AJAX' to Live-MSN" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?title=n-Tiered+AJAX&amp;url=http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/" title="Add 'n-Tiered AJAX' to SlashDot"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/slashdot.png" title="Add 'n-Tiered AJAX' to SlashDot" alt="Add 'n-Tiered AJAX' to SlashDot" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/&amp;t=n-Tiered+AJAX" title="Add 'n-Tiered AJAX' to FaceBook"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'n-Tiered AJAX' to FaceBook" alt="Add 'n-Tiered AJAX' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/" title="Add 'n-Tiered AJAX' to Twitter"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'n-Tiered AJAX' to Twitter" alt="Add 'n-Tiered AJAX' to Twitter" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/reader/link?url=http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/&amp;title=n-Tiered+AJAX&amp;srcURL=http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/" title="Add 'n-Tiered AJAX' to Google Buzz"><img src="http://www.thejacklawson.com/wp-content/plugins/social-bookmarking-reloaded/googlebuzz.png" title="Add 'n-Tiered AJAX' to Google Buzz" alt="Add 'n-Tiered AJAX' to Google Buzz" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://www.thejacklawson.com/index.php/2008/02/n-tiered-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
