<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUcFSXs7eSp7ImA9WhRbFUg.&quot;"><id>tag:blogger.com,1999:blog-8430600509278095130</id><updated>2012-02-06T10:30:18.501-08:00</updated><category term="release notes" /><category term="web 2.0 tutorial" /><category term="toolbar menu" /><category term="dom" /><category term="javascript" /><category term="php" /><category term="ajax" /><category term="programming" /><category term="combobox" /><category term="extjs 2.2.0" /><category term="Asynchronous" /><category term="extjs &quot;sub menu&quot;" /><category term="menubar" /><category term="JavaScript And XML" /><category term="submenu" /><title>Ajax PHP Tutorial | Free PHP Scripts</title><subtitle type="html">Ajax php tutorial is a simple web programming for web 2.0 technology by using Asynchronous JavaScript and XML
(AJAX) and PHP also Get Free PHP Scripts &amp;amp; Extjs FrameWork.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://ajaxphptutorial.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://ajaxphptutorial.blogspot.com/" /><author><name>Larasati Srikandi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/AjaxPhpTutorial" /><feedburner:info uri="ajaxphptutorial" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;Ck4BQnk_fCp7ImA9WxVRFU8.&quot;"><id>tag:blogger.com,1999:blog-8430600509278095130.post-8272990461276297190</id><published>2009-01-20T22:17:00.000-08:00</published><updated>2009-01-20T22:55:53.744-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-20T22:55:53.744-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="combobox" /><category scheme="http://www.blogger.com/atom/ns#" term="menubar" /><category scheme="http://www.blogger.com/atom/ns#" term="toolbar menu" /><category scheme="http://www.blogger.com/atom/ns#" term="submenu" /><category scheme="http://www.blogger.com/atom/ns#" term="extjs &quot;sub menu&quot;" /><title>extjs "sub menu" Using the Toolbar as a menu</title><content type="html">&lt;script type="text/javascript"&gt;&lt;!--&lt;br /&gt;google_ad_client = "pub-3214174784035837";&lt;br /&gt;/* 468x60, created 8/8/08 */&lt;br /&gt;google_ad_slot = "8432016870";&lt;br /&gt;google_ad_width = 468;&lt;br /&gt;google_ad_height = 60;&lt;br /&gt;//--&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&lt;br /&gt;src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;This tutorial is about to answer some questions about how to build :&lt;br /&gt;- the menu dynamically from data pulled from an external db, and that is working fine. However, the items off the main menu list are not expanding out to the right. Instead they drop down below the opening menu item. I took the example code with the static menu and pasted it into the same script and those behave properly - items and sub-menus push out to the right and then flow down.&lt;br /&gt;&lt;br /&gt;- adding a combobox as an item in the menu bar.&lt;br /&gt;&lt;br /&gt;- using inline UL/LI to create a menu using the excellent menubar component.&lt;br /&gt;&lt;br /&gt;- use menubar/menuitems with buttons that have icons with no text.&lt;br /&gt;&lt;br /&gt;- etc.&lt;br /&gt;&lt;br /&gt;to do these please visit: http://extjs.com/forum/showthread.php?p=69007&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3214174784035837";
/* 468x60, created 9/19/08 */
google_ad_slot = "8585310757";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8430600509278095130-8272990461276297190?l=ajaxphptutorial.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1r93heK-rCRIaOmPW8zur15aH8E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1r93heK-rCRIaOmPW8zur15aH8E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1r93heK-rCRIaOmPW8zur15aH8E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1r93heK-rCRIaOmPW8zur15aH8E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxPhpTutorial/~4/tCX4q-vWWug" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxphptutorial.blogspot.com/feeds/8272990461276297190/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8430600509278095130&amp;postID=8272990461276297190" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8430600509278095130/posts/default/8272990461276297190?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8430600509278095130/posts/default/8272990461276297190?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxPhpTutorial/~3/tCX4q-vWWug/using-toolbar-as.html" title="extjs &quot;sub menu&quot; Using the Toolbar as a menu" /><author><name>Larasati Srikandi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>7</thr:total><feedburner:origLink>http://ajaxphptutorial.blogspot.com/2009/01/using-toolbar-as.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEANQ3s_fCp7ImA9WxdaE0w.&quot;"><id>tag:blogger.com,1999:blog-8430600509278095130.post-460068988039961033</id><published>2008-08-21T02:49:00.000-07:00</published><updated>2008-08-21T02:59:52.544-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-21T02:59:52.544-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="extjs 2.2.0" /><category scheme="http://www.blogger.com/atom/ns#" term="ajax" /><category scheme="http://www.blogger.com/atom/ns#" term="release notes" /><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript And XML" /><title>Release Notes for Extjs 2.2.0</title><content type="html">&lt;script type="text/javascript"&gt;&lt;!--&lt;br /&gt;google_ad_client = "pub-3214174784035837";&lt;br /&gt;/* 468x60, created 8/8/08 */&lt;br /&gt;google_ad_slot = "8432016870";&lt;br /&gt;google_ad_width = 468;&lt;br /&gt;google_ad_height = 60;&lt;br /&gt;//--&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&lt;br /&gt;src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;Release Notes for Ext 2.2.0&lt;br /&gt;&lt;br /&gt;Release Date: August 4, 2008&lt;br /&gt;Current Version: 2.2.0 (rev 2547)&lt;br /&gt;Previous Version: 2.1.0 (rev 2042)&lt;br /&gt;Overview&lt;br /&gt;&lt;br /&gt;    * Full Firefox 3.0 support&lt;br /&gt;    * Added Ext.History component and sample&lt;br /&gt;    * Completely refactored Checkbox and Radio controls&lt;br /&gt;    * Added CheckboxGroup and RadioGroup components and sample&lt;br /&gt;    * Added MultiSelect and ItemSelector extensions and sample&lt;br /&gt;    * Added FileUploadField extension and sample&lt;br /&gt;    * Added XMLTreeLoader extension and sample&lt;br /&gt;    * Added several new Drag-and-Drop samples&lt;br /&gt;    * Added GMapPanel extension and sample&lt;br /&gt;    * Grid performance improvements&lt;br /&gt;    * Many general improvements and bug fixes&lt;br /&gt;    * Extensive documentation improvements&lt;br /&gt;    * Various locale file updates&lt;br /&gt;&lt;br /&gt;Change Log&lt;br /&gt;&lt;br /&gt;    * Adapters&lt;br /&gt;          o Ext Base&lt;br /&gt;                + Added UTF-8 to defaultPostHeader to support international char sets properly&lt;br /&gt;    * Ext.core&lt;br /&gt;          o Ext&lt;br /&gt;                + New properties for isGecko2 and isGecko3&lt;br /&gt;                + Updated useShims property to be Gecko2-only on Mac&lt;br /&gt;                + Fix for isArray and array check fix in Ext.each&lt;br /&gt;          o Ext.Element&lt;br /&gt;                + Event registration improvements&lt;br /&gt;                + Updated Gecko/Mac overflow auto fix to be scoped to Gecko2 only&lt;br /&gt;                + Shim border fix for IE8&lt;br /&gt;          o Ext.EventManager&lt;br /&gt;                + Event handler registration logic refactored to fix DOM leak issues&lt;br /&gt;          o Ext.Updater&lt;br /&gt;                + Now extends Ext.util.Observable&lt;br /&gt;                + New overrideable getDefaultRenderer method&lt;br /&gt;                + Fix in update method to preserve passed in config options correctly&lt;br /&gt;    * Ext.data&lt;br /&gt;          o Ext.data.Connection&lt;br /&gt;                + New disableCachingParam config&lt;br /&gt;          o Ext.data.Record&lt;br /&gt;                + Fixed type coercion bug in isModified&lt;br /&gt;          o Ext.data.Tree&lt;br /&gt;                + New Node.isExpandable method&lt;br /&gt;    * Ext.util&lt;br /&gt;          o Ext.util.ClickRepeater&lt;br /&gt;                + Fixed scope issue when unregistering interal event handlers&lt;br /&gt;          o Ext.util.Date&lt;br /&gt;                + Various date format fixes&lt;br /&gt;          o Ext.util.Format&lt;br /&gt;                + Fix in htmlDecode to handle ampersands correctly&lt;br /&gt;                + New nl2br (newline to BR) function&lt;br /&gt;          o Ext.util.History&lt;br /&gt;                + New component&lt;br /&gt;          o Ext.util.KeyMap&lt;br /&gt;                + Added stopEvent as a valid config option for the addBinding method&lt;br /&gt;    * Ext.widgets&lt;br /&gt;          o Ext.Button&lt;br /&gt;                + Fixes to minimize mouse handlers created on buttons&lt;br /&gt;          o Ext.Component&lt;br /&gt;                + New initPlugin method for more flexible plugin initialization&lt;br /&gt;                + Fix to ignore state events if stateful=false&lt;br /&gt;          o Ext.Container&lt;br /&gt;                + Updated onDestroy to call destroy on the container's layout if available&lt;br /&gt;                + Fixed default scope passed to the cascaded function in Container.cascade&lt;br /&gt;          o Ext.DatePicker&lt;br /&gt;                + Marked constrainToViewport config as deprecated (it's not currently used)&lt;br /&gt;                + Changed disabledDaysText and disabledDatesText to default to "Disabled" instead of ""&lt;br /&gt;                + New configs for minDate, maxDate, disabledDays, disabledDaysRE and disabledDates&lt;br /&gt;                + New methods setDisabledDates, setDisabledDays, setMinDate and setMaxDate&lt;br /&gt;                + New showToday config to show/hide the Today button and footer&lt;br /&gt;                + Fixed selectToday to check for disabled Today button before changing the date&lt;br /&gt;          o Ext.DataView&lt;br /&gt;                + New mouseenter and mouseleave events&lt;br /&gt;                + New trackOver config to enable mouse events&lt;br /&gt;                + Fix in getNodes to calculate the end node correctly&lt;br /&gt;          o Ext.Editor&lt;br /&gt;                + New canceledit event&lt;br /&gt;                + Fixed issue with TriggerField editors not blurring correctly on key navigation&lt;br /&gt;                + Fixed editor wrapper element scrollbar issue in FF2/Opera&lt;br /&gt;          o Ext.PagingToolbar&lt;br /&gt;                + Added beforechange and change events and changePage method&lt;br /&gt;                + Fixed handling of 0 entered into the page field&lt;br /&gt;          o Ext.Panel&lt;br /&gt;                + Change to set ownerCt on buttons added to panels&lt;br /&gt;                + Fix for FF2/Mac scroll bar issue on contained items&lt;br /&gt;                + Fix panel disabling support in IE&lt;br /&gt;                + Fixed in destruction order of internal components&lt;br /&gt;          o Ext.ProgressBar&lt;br /&gt;                + Fix to only attempt progress updates if rendered&lt;br /&gt;                + Added support for the text config in the wait method&lt;br /&gt;                + Fix for preserving the proper progress width in ratio to the value on resize&lt;br /&gt;          o Ext.QuickTips&lt;br /&gt;                + Added autoRender support to fix initial display issues&lt;br /&gt;          o Ext.Resizable&lt;br /&gt;                + Change to render the resize proxy to the document body instead of as a sibling to its element so it doesn't interfere with Component position calculations&lt;br /&gt;          o Ext.Slider&lt;br /&gt;                + New dragging property and changecomplete event&lt;br /&gt;                + Fixes for slider with minValue != 0&lt;br /&gt;                + Fix for preserving the proper thumb position in ratio to the value on resize&lt;br /&gt;          o Ext.StatusBar&lt;br /&gt;                + Fix for setting the proper default icon on clear&lt;br /&gt;          o Ext.TabPanel&lt;br /&gt;                + Fix to position the tab strip spacer element correctly for tabPosition bottom&lt;br /&gt;                + Fix for FF3 to raise the contextmenu event correctly on tab strip right-click&lt;br /&gt;          o Ext.Tip&lt;br /&gt;                + Fixed IE7 repaint bug on initial show&lt;br /&gt;          o Ext.Toolbar&lt;br /&gt;                + Fix in addField to add the fields to the items collection rather than the Toolbar items&lt;br /&gt;          o Ext.Window&lt;br /&gt;                + Added doLayout call on resize&lt;br /&gt;          o Ext.dd.DDCore&lt;br /&gt;                + Fixed null error in isValidHandleChild&lt;br /&gt;          o Ext.dd.ScrollManager&lt;br /&gt;                + Fix to enable overriding scroll frequency in the scroll config object&lt;br /&gt;          o Ext.dd.StatusProxy&lt;br /&gt;                + Fix to remove float style from ghost elements when adding them to the proxy to prevent proxy box collapse&lt;br /&gt;          o Ext.form.Checkbox&lt;br /&gt;                + Completely refactored to support new visual styles&lt;br /&gt;          o Ext.form.CheckboxGroup&lt;br /&gt;                + New component&lt;br /&gt;          o Ext.form.DateField&lt;br /&gt;                + New showToday config to show/hide the Today button and footer on the associated DatePicker&lt;br /&gt;                + New methods setDisabledDates, setDisabledDays, setMinValue and setMaxValue&lt;br /&gt;          o Ext.form.Field&lt;br /&gt;                + Fix to prevent initializing the data value to emptyText&lt;br /&gt;                + Fix to preserve the originalValue on init&lt;br /&gt;                + Fix for odd FF/Win issue when changing OS window focus that disabled editing&lt;br /&gt;                + Change to default error messages to basic tooltips if no field container el is available&lt;br /&gt;          o Ext.form.FormPanel&lt;br /&gt;                + Change to make the form tag into the panel's body element&lt;br /&gt;          o Ext.form.HtmlEditor&lt;br /&gt;                + Scoped disabling the font, link, lists and source edit buttons to Safari2 only (Safari3 is OK)&lt;br /&gt;                + Various fixes to improve initialization&lt;br /&gt;                + Fix to prevent multiple event handlers from being setup (resolved double line break issue in IE)&lt;br /&gt;                + Fixed issue of IE allowing toolbar commands to apply to content outside the editor body&lt;br /&gt;          o Ext.form.Label&lt;br /&gt;                + Added setText method&lt;br /&gt;          o Ext.form.TextArea&lt;br /&gt;                + Fixed onKeyUp not calling its superclass method&lt;br /&gt;          o Ext.form.TimeField&lt;br /&gt;                + Fix for broken field on DST boundary dates&lt;br /&gt;          o Ext.form.TriggerField&lt;br /&gt;                + Fix for trigger icon alignment to field in IE&lt;br /&gt;                + Fixed missing scope to properly remove the document mousedown handler after mimicing blur&lt;br /&gt;          o Ext.form.Radio&lt;br /&gt;                + Completely refactored to support new visual styles&lt;br /&gt;          o Ext.form.RadioGroup&lt;br /&gt;                + New component&lt;br /&gt;          o Ext.form.TextField&lt;br /&gt;                + Fix for selectOnFocus support&lt;br /&gt;                + Fixed broken key filtering when using maskRe in non-FF browsers&lt;br /&gt;          o Ext.grid.ColumnModel&lt;br /&gt;                + Fixed configchange event declaration name typo&lt;br /&gt;          o Ext.grid.EditorGrid&lt;br /&gt;                + Fix to align editors correctly with mixed-height row content&lt;br /&gt;                + Fixed bug in preEditValue that prevented html decoding when needed&lt;br /&gt;                + Added onDestroy method to clean up column model's editors on destroy&lt;br /&gt;          o Ext.grid.GridPanel&lt;br /&gt;                + New deferRowRender config&lt;br /&gt;          o Ext.grid.GridView&lt;br /&gt;                + New configs for controlling cell and row selector class and depth&lt;br /&gt;                + Fixes to sync the invisible focus element on row add/remove actions&lt;br /&gt;                + Moved some rendering logic to afterRender (improved performance)&lt;br /&gt;          o Ext.layout.BorderLayout&lt;br /&gt;                + Added destroy method to clean up splitbars created by layout&lt;br /&gt;          o Ext.layout.ColumnLayout&lt;br /&gt;                + Target size calculation fix for IE&lt;br /&gt;          o Ext.layoutContainerLayout&lt;br /&gt;                + Added support for subclass destroy functions&lt;br /&gt;          o Ext.menu.Item&lt;br /&gt;                + Improved tolerance for mousing from a menu to its submenu without dismissing the submenu too quickly while passing over other menu items&lt;br /&gt;          o Ext.menu.Menu&lt;br /&gt;                + New ignoreParentClicks config to ignore clicks on menu items with child menus&lt;br /&gt;          o Ext.menu.TextItem&lt;br /&gt;                + Updated constructor to support config object in addition to just text&lt;br /&gt;          o Ext.tree.TreeDragZone&lt;br /&gt;                + Fix to honor the hlDrop config on invalid drop repair&lt;br /&gt;          o Ext.tree.TreeDropZone&lt;br /&gt;                + Fixed highlight calls to check enableFx first to avoid possible errors&lt;br /&gt;          o Ext.tree.TreeEditor&lt;br /&gt;                + Fixed editor alignment to node when autoScroll is on and the node is outside the scroll area&lt;br /&gt;          o Ext.tree.TreeLoader&lt;br /&gt;                + Fixed type coercion bug in isLoading&lt;br /&gt;                + Updated createNode to support new TreePanel.nodeTypes&lt;br /&gt;          o Ext.tree.TreeNode&lt;br /&gt;                + New getLoader method&lt;br /&gt;                + Fixed null error in destroy when no child nodes present&lt;br /&gt;          o Ext.tree.TreeNodeUI&lt;br /&gt;                + Refactored internal support for Ext.data.Node.isExpandable&lt;br /&gt;          o Ext.tree.TreePanel&lt;br /&gt;                + Ability to specify dataUrl or a TreeLoader config in addition to a TreeLoader instance&lt;br /&gt;                + New nodeTypes support for more flexible node declaration and creation&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3214174784035837";
/* 468x60, created 9/19/08 */
google_ad_slot = "8585310757";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8430600509278095130-460068988039961033?l=ajaxphptutorial.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8yX6pYPjDyqhnHR-jydDOA-wqas/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8yX6pYPjDyqhnHR-jydDOA-wqas/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8yX6pYPjDyqhnHR-jydDOA-wqas/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8yX6pYPjDyqhnHR-jydDOA-wqas/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxPhpTutorial/~4/eQDb8lBwyNU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxphptutorial.blogspot.com/feeds/460068988039961033/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8430600509278095130&amp;postID=460068988039961033" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8430600509278095130/posts/default/460068988039961033?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8430600509278095130/posts/default/460068988039961033?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxPhpTutorial/~3/eQDb8lBwyNU/release-notes-for-extjs-220.html" title="Release Notes for Extjs 2.2.0" /><author><name>Larasati Srikandi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://ajaxphptutorial.blogspot.com/2008/08/release-notes-for-extjs-220.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEHRn05fSp7ImA9WxdaE0w.&quot;"><id>tag:blogger.com,1999:blog-8430600509278095130.post-3133258300267826643</id><published>2008-08-21T02:41:00.000-07:00</published><updated>2008-08-21T03:13:57.325-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-21T03:13:57.325-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="extjs 2.2.0" /><category scheme="http://www.blogger.com/atom/ns#" term="ajax" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>AJAX Ext js 2.2.0: History, Selectors, FileUploader</title><content type="html">&lt;script type="text/javascript"&gt;&lt;!--&lt;br /&gt;google_ad_client = "pub-3214174784035837";&lt;br /&gt;/* 468x60, created 8/8/08 */&lt;br /&gt;google_ad_slot = "8432016870";&lt;br /&gt;google_ad_width = 468;&lt;br /&gt;google_ad_height = 60;&lt;br /&gt;//--&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&lt;br /&gt;src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;h1&gt;&lt;a href="http://feeds.feedburner.com/%7Er/ajaxian/%7E3/357518194/ext-22-history-selectors-fileuploader-and-more" rel="bookmark" title="Ext 2.2: History, Selectors, FileUploader, and more"&gt;AJAX Ext js 2.2: History, Selectors, FileUploader&lt;/a&gt;&lt;/h1&gt;&lt;br /&gt;&lt;p class="post_date"&gt;&lt;a href="http://extjs.com/blog/2008/08/04/ext-22-released/"&gt;Ext 2.2 has been released&lt;/a&gt;, and it has features to complement the usual maintenance bug fixes and performance updates (Ext now works better in Firefox 3).&lt;/p&gt;&lt;br /&gt;&lt;div class="entry"&gt;&lt;p&gt;New features include:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://extjs.com/deploy/dev/examples/form/check-radio.html"&gt;CheckboxGroup / RadioGroup&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Technically, while the individual Checkbox and Radio controls are not new, they may as well be, considering the overhaul they have had in this release. Gone are the ugly standard browser input controls, now replaced by attractive, visually-consistent Ext-ified versions (a long-overdue improvement).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In addition to that, we’ve added group controls for both that support complex layouts with just a config option or two. Previously in order to accomplish similar grouping layouts you would have had to create a container with a ColumnLayout and manually place your controls across multiple column configs.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://extjs.com/deploy/dev/examples/history/history.html"&gt;History&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Another component that has been missing in Ext is a browser history utility to enable history stack navigation within your single-page Ext application. The new Ext.History singleton makes it extremely easy to do exactly that, and it uses an event-based API to notify you when the browser history as changed.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://extjs.com/deploy/dev/examples/multiselect/multiselect-demo.html"&gt;MultiSelect / ItemSelector&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;These two components were contributed to Ext by community member TJ Stuart (thanks TJ). The MultiSelect is a traditional list control that allows for selecting multiple list items, and the ItemSelector combines two MultiSelects into a more sophisticated control that includes drag-and-drop list selection and bulk selection and deselection among other features.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://extjs.com/deploy/dev/examples/form/file-upload.html"&gt;FileUploadField&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This is an official extension provided as a sample for implementing a useful form component. Not everyone needs a form upload component, but if you do, you can’t live without it. This control is fully styled and has an API consistent with other Ext form controls. It also supports both Text+Button (read-only text) and Button-only modes, and can participate fully in form layouts.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://extjs.com/deploy/dev/examples/tree/xml-tree-loader.html"&gt;XmlTreeLoader&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This official extension provides a great demonstration of extending an existing Ext component to provide functionality that you need in your own application. Again, loading an XML document into a tree is not needed by everyone, but if you do need something similar, this should be a great demo.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://extjs.com/deploy/dev/examples/window/gmap.html"&gt;GMapPanel&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This extension was originally written up as a demo for one of our previous blog posts. However, it proved to be such a hit with the community that we transformed it into an official extension. This is another useful example of extending a standard Ext component, in this case to interface with an external API.&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3214174784035837";
/* 468x60, created 9/19/08 */
google_ad_slot = "8585310757";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8430600509278095130-3133258300267826643?l=ajaxphptutorial.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lDNTOAcKSAwKRGXujPqJ34bsoXc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lDNTOAcKSAwKRGXujPqJ34bsoXc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lDNTOAcKSAwKRGXujPqJ34bsoXc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lDNTOAcKSAwKRGXujPqJ34bsoXc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxPhpTutorial/~4/SIdEiw5T3Yc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxphptutorial.blogspot.com/feeds/3133258300267826643/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8430600509278095130&amp;postID=3133258300267826643" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8430600509278095130/posts/default/3133258300267826643?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8430600509278095130/posts/default/3133258300267826643?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxPhpTutorial/~3/SIdEiw5T3Yc/ajax-ext-js-2.html" title="AJAX Ext js 2.2.0: History, Selectors, FileUploader" /><author><name>Larasati Srikandi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxphptutorial.blogspot.com/2008/08/ajax-ext-js-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYHSHs_eyp7ImA9WxdbEks.&quot;"><id>tag:blogger.com,1999:blog-8430600509278095130.post-3046857043357852851</id><published>2008-08-08T23:42:00.000-07:00</published><updated>2008-08-09T00:15:39.543-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-09T00:15:39.543-07:00</app:edited><title>AJAX with ExtJS JavaScript Framework</title><content type="html">&lt;h2&gt;Ext JS, the JavaScript framework with Ajax and UI Components&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Ext JS, the JavaScript framework with Ajax and UI Components&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;a href="http://www.extjs.com"&gt;Ext JS &lt;/a&gt;is a JavaScript Library/Framework which works in conjunction with Prototype, YahooUI and jQuery. It&amp;#8217;s probably the most exciting toolkit available for building web 2.0 websites right now. It&amp;#8217;s jam packed with features, and is designed to make life much easier for building great UI in JavaScript.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I&amp;#8217;ll not dig to deep right now, I suggest you check out the &lt;a href="http://extjs.com/deploy/ext/docs/index.html"&gt;example and demos&lt;/a&gt; first to see what you think.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Below is a the script used to grab XML data via Ajax and populate a grid (sortable table like object):&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;/*&lt;br /&gt; * Ext JS Library 1.0.1&lt;br /&gt; * Copyright(c) 2006-2007, Ext JS, LLC.&lt;br /&gt; * licensing@extjs.com&lt;br /&gt; *&lt;br /&gt; * http://www.extjs.com/license&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;Ext.onReady(function(){&lt;br /&gt;&lt;br /&gt;    // create the Data Store&lt;br /&gt;    var ds = new Ext.data.Store({&lt;br /&gt;        // load using HTTP&lt;br /&gt;        proxy: new Ext.data.HttpProxy({url: 'sheldon.xml'}),&lt;br /&gt;&lt;br /&gt;        // the return will be XML, so lets set up a reader&lt;br /&gt;        reader: new Ext.data.XmlReader({&lt;br /&gt;               // records will have an "Item" tag&lt;br /&gt;               record: 'Item',&lt;br /&gt;               id: 'ASIN',&lt;br /&gt;               totalRecords: '@total'&lt;br /&gt;           }, [&lt;br /&gt;               // set up the fields mapping into the xml doc&lt;br /&gt;               // The first needs mapping, the others are very basic&lt;br /&gt;               {name: 'Author', mapping: 'ItemAttributes &gt; Author'},&lt;br /&gt;               'Title', 'Manufacturer', 'ProductGroup'&lt;br /&gt;           ])&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;    var cm = new Ext.grid.ColumnModel([&lt;br /&gt;     {header: "Author", width: 120, dataIndex: 'Author'},&lt;br /&gt;  {header: "Title", width: 180, dataIndex: 'Title'},&lt;br /&gt;  {header: "Manufacturer", width: 115, dataIndex: 'Manufacturer'},&lt;br /&gt;  {header: "Product Group", width: 100, dataIndex: 'ProductGroup'}&lt;br /&gt; ]);&lt;br /&gt;    cm.defaultSortable = true;&lt;br /&gt;&lt;br /&gt;    // create the grid&lt;br /&gt;    var grid = new Ext.grid.Grid('example-grid', {&lt;br /&gt;        ds: ds,&lt;br /&gt;        cm: cm&lt;br /&gt;    });&lt;br /&gt;    grid.render();&lt;br /&gt;&lt;br /&gt;    ds.load();&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Take a look at the &lt;a href="http://extjs.com/deploy/ext/examples/grid/xml-grid.html"&gt;JavaScript generated grid here&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Hopefully this short intro will wet your appetite, more to come soon.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Great work Jack (and the rest of the Ext JS team) for this superb library, can&amp;#8217;t wait to see more!!&lt;/p&gt;&lt;br /&gt;        &lt;br /&gt;&lt;h2 &gt;JavaScript Form Validator number two&lt;/h2&gt;&lt;br /&gt;&lt;p class="postmeta"&gt;&lt;b&gt;That&amp;#8217;s nice, but what does it do?&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align='justify'&gt;Well it validates your form stupid!! as with most (if not all?) posts on this website, the script is simple, easy to follow and not jam packed with to many features. Basically this script will look for required fields (which you specify in your form.. I&amp;#8217;ll come to this later) and if a required field is empty, it will through up a JavaScript alert box telling the user (and prevent the form from being submitted).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Before I present to you the Code Example, I&amp;#8217;ll explain a little about how to configure your form and make certain fields required.&lt;br /&gt;&lt;br /&gt;For simplicity, I&amp;#8217;ve chosen to make use of the fields &amp;#8216;Title&amp;#8217; tag. This is where you make fields required.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;For example: &lt; input type="text" name="FirstName" &lt;b&gt;title=&amp;#8221;required&amp;#8221;&lt;/b&gt; &gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; The script will support the following form field types:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Text&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Textarea&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Password&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Select&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Just to recap. To make any of the supported fields required, just add &lt;b&gt;title=&amp;#8221;required&amp;#8221;&lt;/b&gt;!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Triggering the form to call the JavaScript Validation Script:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt; In order for the form to call the JavaScript and check all the required fields, we need to prevent the form from submitting. In order to achieve this, we will use the &lt;b&gt;onSubmit&lt;/b&gt; event on the &lt;b&gt;form&lt;/b&gt; tag. Example:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt; form name="myForm" method="post" action="process.php" &lt;b&gt;onSubmit=&amp;#8221;return myForm.check(this)&amp;#8221;&lt;/b&gt; &gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;We must use &lt;b&gt;return&lt;/b&gt; before the function call, this tells to form &amp;#8216;do not submit the form unless the function returns true&amp;#8217;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;The JavaScript form Validator Script&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var myForm = {&lt;br /&gt;  fTitle : "",&lt;br /&gt;  fValue : "",&lt;br /&gt;  fName : "",&lt;br /&gt;  fField : "",&lt;br /&gt;&lt;br /&gt;  check : function(fObject) {&lt;br /&gt;    for(var i = 0;i &lt; fObject.elements.length;i++) {&lt;br /&gt;    fField = fObject.elements[i];&lt;br /&gt;    fTitle = fField.title;&lt;br /&gt;    fValue = myString.trim(fField.value);&lt;br /&gt;    fName = fField.name;&lt;br /&gt;    fType = fField.type;&lt;br /&gt;    switch(fType) {&lt;br /&gt;      case "text":&lt;br /&gt;      case "password":&lt;br /&gt;      case "textarea":&lt;br /&gt;        if(fTitle == "required" &amp;#038;&amp;#038; encodeURI(fValue).length &lt; 1) {&lt;br /&gt;        alert(fName+': is required, please complete.');&lt;br /&gt;        fField.focus();&lt;br /&gt;        return false;&lt;br /&gt;      } // if&lt;br /&gt;      break;&lt;br /&gt;      case "select-one":&lt;br /&gt;        if(fTitle == "required" &amp;#038;&amp;#038;&lt;br /&gt;        fField.options[fField.selectedIndex].value.length &lt; 1) {&lt;br /&gt;        alert(fName+': is required, please select one.');&lt;br /&gt;        fField.focus();&lt;br /&gt;        return false;&lt;br /&gt;        } // if&lt;br /&gt;      break;&lt;br /&gt;    } // switch&lt;br /&gt;    } // for&lt;br /&gt;  } // method&lt;br /&gt;} // object&lt;br /&gt;&lt;br /&gt;var myString = {&lt;br /&gt;  trim : function(s) {&lt;br /&gt;  return s.replace(/^\s+/, '').replace(/\s+$/, '');&lt;br /&gt;  }, // method&lt;br /&gt;  noTags : function(s) {&lt;br /&gt;    return s.replace(/&lt;\/?[^&gt;]+&gt;/gi, '');&lt;br /&gt;  },&lt;br /&gt;  strip : function(s) {&lt;br /&gt;    return this.noTags(this.trim(s));&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;As you can see, this is nice and easy to follow. Nothing to fancy, but believe me this wee function can save a lot of time, especially if you build a lot of forms.&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;b&gt;Why does it not do more complex validation?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Simple, because I like to keep things nice and easy (and I don&amp;#8217;t do complex)&amp;#8230;. The last thing I want to do is give you a headache. Like everything on this site, this is just an example. Please feel free to use and enhance it to fit better with your own needs.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Before I go, I&amp;#8217;d better mention that the JavaScript function will strip out any leading and trailing whitespace before the validation is done. There is also a little function to strip out HTML tags (it&amp;#8217;s not being used in the above example, but you can make use of this on a field basis by using the onFocus event!!), Just a little bonus!!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3214174784035837";
/* 468x60, created 9/19/08 */
google_ad_slot = "8585310757";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8430600509278095130-3046857043357852851?l=ajaxphptutorial.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/M7vt4LIBYZX4iB2j9L69Qkf4dTc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M7vt4LIBYZX4iB2j9L69Qkf4dTc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/M7vt4LIBYZX4iB2j9L69Qkf4dTc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M7vt4LIBYZX4iB2j9L69Qkf4dTc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxPhpTutorial/~4/cR0Tw3vA8_U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxphptutorial.blogspot.com/feeds/3046857043357852851/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8430600509278095130&amp;postID=3046857043357852851" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8430600509278095130/posts/default/3046857043357852851?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8430600509278095130/posts/default/3046857043357852851?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxPhpTutorial/~3/cR0Tw3vA8_U/ajax-with-extjs-javascript-framework.html" title="AJAX with ExtJS JavaScript Framework" /><author><name>Larasati Srikandi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://ajaxphptutorial.blogspot.com/2008/08/ajax-with-extjs-javascript-framework.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cCSXw7eip7ImA9WxdbFE4.&quot;"><id>tag:blogger.com,1999:blog-8430600509278095130.post-9176929712035983076</id><published>2008-08-08T23:13:00.001-07:00</published><updated>2008-08-11T00:17:48.202-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-11T00:17:48.202-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dom" /><category scheme="http://www.blogger.com/atom/ns#" term="Asynchronous" /><category scheme="http://www.blogger.com/atom/ns#" term="ajax" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript And XML" /><title>AJAX stands for Asynchronous JavaScript And XML.</title><content type="html">&lt;h1&gt;AJAX stands for Asynchronous JavaScript And XML.&lt;/h1&gt;&lt;br /&gt;&lt;p align="justify"&gt;AJAX = Asynchronous JavaScript and XML&lt;br /&gt;AJAX is not a new programming language, but a technique for creating better, faster, and more interactive web applications.&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;With AJAX, your JavaScript can communicate directly with the server, using the JavaScript XMLHttpRequest object. With this object, your JavaScript can trade data with a web server, without reloading the page.&lt;br /&gt;AJAX uses asynchronous data transfer (HTTP requests) between the browser and the web server, allowing web pages to request small bits of information from the server instead of whole pages.&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;The AJAX technique makes Internet applications smaller, faster and more user-friendly.&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;AJAX is a browser technology independent of web server software.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;AJAX is Based on Web Standards&lt;/h2&gt;&lt;br /&gt;&lt;p align="justify"&gt;AJAX is based on the following web standards:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;JavaScript &lt;/li&gt;&lt;br /&gt;&lt;li&gt;XML &lt;/li&gt;&lt;br /&gt;&lt;li&gt;HTML &lt;/li&gt;&lt;br /&gt;&lt;li&gt;CSS &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The web standards used in AJAX are well defined, and supported by all major browsers. AJAX applications are browser and platform independent.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;AJAX is About Better Internet Applications&lt;/h3&gt;&lt;br /&gt;&lt;p align='justify'&gt;Web applications have many benefits over desktop applications; they can reach a larger audience, they are easier to install and support, and easier to develop.&lt;br&gt;&lt;br /&gt;However, Internet applications are not always as "rich" and user-friendly as traditional desktop applications. &lt;br /&gt;With AJAX, Internet applications can be made richer and more user-friendly.&lt;br /&gt;AJAX is based on existing standards. These standards have been used by most developers for several years.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;AJAX Uses HTTP Requests&lt;/h3&gt;&lt;br /&gt;&lt;p align='justify'&gt;In traditional JavaScript coding, if you want to get any information from a database or a file on the server, or send user information to a server, you will have to make an HTML form and GET or POST data to the server. The user will have to click the "Submit" button to send/get the information, wait for the server to respond, then a new page will load with the results.&lt;/p&gt;&lt;br /&gt;&lt;p align='justify'&gt;Because the server returns a new page each time the user submits input, traditional web applications can run slowly and tend to be less user-friendly.&lt;/p&gt;&lt;br /&gt;&lt;p align='justify'&gt;With AJAX, your JavaScript communicates directly with the server, through the JavaScript XMLHttpRequest object&lt;/p&gt;&lt;br /&gt;&lt;p align='justify'&gt;With an HTTP request, a web page can make a request to, and get a response from a web server - without reloading the page. The user will stay on the same page, and he or she will not notice that scripts request pages, or send data to a server in the background.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3214174784035837";
/* 468x60, created 9/19/08 */
google_ad_slot = "8585310757";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8430600509278095130-9176929712035983076?l=ajaxphptutorial.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-yUes29fOr6QF58GJnlsOpTy3SM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-yUes29fOr6QF58GJnlsOpTy3SM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-yUes29fOr6QF58GJnlsOpTy3SM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-yUes29fOr6QF58GJnlsOpTy3SM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxPhpTutorial/~4/fe_ZJ4lU2uw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxphptutorial.blogspot.com/feeds/9176929712035983076/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8430600509278095130&amp;postID=9176929712035983076" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8430600509278095130/posts/default/9176929712035983076?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8430600509278095130/posts/default/9176929712035983076?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxPhpTutorial/~3/fe_ZJ4lU2uw/ajax-stands-for-asynchronous-javascript.html" title="AJAX stands for Asynchronous JavaScript And XML." /><author><name>Larasati Srikandi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxphptutorial.blogspot.com/2008/08/ajax-stands-for-asynchronous-javascript.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYCQ385eyp7ImA9WxdbFEk.&quot;"><id>tag:blogger.com,1999:blog-8430600509278095130.post-6603033483739511696</id><published>2008-08-08T22:05:00.000-07:00</published><updated>2008-08-11T00:36:02.123-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-11T00:36:02.123-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="web 2.0 tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="dom" /><category scheme="http://www.blogger.com/atom/ns#" term="ajax" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>AJAX is WEB 2.0 programming technology</title><content type="html">&lt;!-- AJAX, PHP //--&gt;&lt;br /&gt;&lt;h2&gt;&lt;a name="What_is_it" id="What_is_it"&gt;&lt;/a&gt;What is AJAX?&lt;/h2&gt;&lt;br /&gt;&lt;p align="justify"&gt;AJAX is an acronym for &lt;b&gt;Asynchronous JavaScript and XML&lt;/b&gt;.  It is a development technique for creating interactive web applications.  Unlike classic web pages, which must load in their entirety if content changes, AJAX allows web pages to be updated asynchronously by exchanging small amounts of data with the server behind the scenes.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;AJAX uses a combination of:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;    &lt;li&gt;CSS, for marking up and styling information.&lt;br /&gt;    &lt;li&gt;The Document Object Model accessed with a client-side scripting language like JavaScript&lt;br /&gt;  to dynamically display and interact with the information presented.&lt;br /&gt;    &lt;li&gt;The XMLHttpRequest object to exchange data asynchronously with the web server.&lt;br /&gt;    &lt;li&gt;XML is sometimes used as the format for transferring data between the server and client,&lt;br /&gt;  although any format will work.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h4&gt;&lt;a name="TalkServer" id="TalkServer"&gt;&lt;/a&gt;Talking to the Server&lt;/h4&gt;&lt;br /&gt;&lt;p align="justify"&gt;Once the DOM event has occurred on the webpage, we need to obtain an XMLHttpRequest Object.  This is&lt;br /&gt;done using a function like the following.  We need to write it this way to accommodate different browsers.&lt;br /&gt;Notice that we set the callback function using &lt;code&gt;onreadystatechange&lt;/code&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;var obj;&lt;br /&gt;&lt;br /&gt;function ProcessXML(url) {&lt;br /&gt;  // native  object&lt;br /&gt;&lt;br /&gt;  if (window.XMLHttpRequest) {&lt;br /&gt;    // obtain new object&lt;br /&gt;    obj = new XMLHttpRequest();&lt;br /&gt;    // set the callback function&lt;br /&gt;    obj.onreadystatechange = processChange;&lt;br /&gt;    // we will do a GET with the url; "true" for asynch&lt;br /&gt;    obj.open("GET", url, true);&lt;br /&gt;    // null for GET with native object&lt;br /&gt;    obj.send(null);&lt;br /&gt;  // IE/Windows ActiveX object&lt;br /&gt;  } else if (window.ActiveXObject) {&lt;br /&gt;    obj = new ActiveXObject("Microsoft.XMLHTTP");&lt;br /&gt;    if (obj) {&lt;br /&gt;      obj.onreadystatechange = processChange;&lt;br /&gt;      obj.open("GET", url, true);&lt;br /&gt;      // don't send null for ActiveX&lt;br /&gt;      obj.send();&lt;br /&gt;    }&lt;br /&gt;  } else {&lt;br /&gt;    alert("Your browser does not support AJAX");&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;AJAX: Here are the attributes and methods for the XMLHttpRequest Class: &lt;br /&gt;&lt;br /&gt;          &lt;font color="#000066"&gt;&lt;b&gt;Attributes&lt;/b&gt;&lt;/font&gt; &lt;/p&gt;&lt;br /&gt;        &lt;table width="100%" border="1" cellspacing="2" cellpadding="4"&gt;&lt;br /&gt;          &lt;tr&gt;&lt;br /&gt;            &lt;td width="19%"&gt;&lt;font color="#000066"&gt;&lt;b&gt;readyState&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td width="81%"&gt;The readyState code changes value from 0 to 4 during a request cycle:  &lt;br&gt;0: not initialized.&lt;br /&gt;&lt;br&gt;1: connection established.&lt;br /&gt;&lt;br&gt;2: request received.&lt;br /&gt;&lt;br&gt;3: processing.&lt;br /&gt;&lt;br&gt;4: finished and response is ready.&lt;br /&gt;&lt;br /&gt;          &lt;/tr&gt;&lt;br /&gt;          &lt;tr&gt;&lt;br /&gt;            &lt;td width="19%"&gt;&lt;font color="#000066"&gt;&lt;b&gt;status&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td width="81%"&gt;200: "OK"&lt;br&gt;&lt;br /&gt;              404: Page not found.&lt;/td&gt;&lt;br /&gt;          &lt;/tr&gt;&lt;br /&gt;          &lt;tr&gt;&lt;br /&gt;            &lt;td width="19%"&gt;&lt;b&gt;&lt;font color="#000066"&gt;onreadystatechange&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td width="81%"&gt;callback method assigned via this attribute&lt;/td&gt;&lt;br /&gt;          &lt;/tr&gt;&lt;br /&gt;           &lt;tr&gt;&lt;br /&gt;            &lt;td width="19%"&gt;&lt;font color="#000066"&gt;&lt;b&gt;responseText&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td width="81%"&gt;holds the response data as a string of characters.&lt;/td&gt;&lt;br /&gt;          &lt;/tr&gt;&lt;br /&gt;          &lt;tr&gt;&lt;br /&gt;            &lt;td width="19%"&gt;&lt;font color="#000066"&gt;&lt;b&gt;responseXml&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td width="81%"&gt;holds the response data as XML&lt;br /&gt;              data.&lt;/td&gt;&lt;br /&gt;          &lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;        &lt;p&gt; &lt;font color="#000066"&gt;&lt;b&gt;Methods&lt;/b&gt;&lt;/font&gt; &lt;br&gt;&lt;br /&gt;        &lt;/p&gt;&lt;br /&gt;        &lt;table class="demo" width="100%" border="1" cellspacing="2" cellpadding="4"&gt;&lt;br /&gt;          &lt;tr&gt;&lt;br /&gt;            &lt;td width="19%"&gt;&lt;font color="#000066"&gt;&lt;b&gt;&lt;font color="#000066"&gt;open&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;(mode,&lt;br /&gt;              url, boolean)&lt;font color="#000066"&gt;&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td width="81%"&gt;mode: type of request: GET or POST&lt;br&gt;&lt;br /&gt;              url: the location of the file&lt;br&gt;&lt;br /&gt;              boolean: true (asynchronous) or false (synchronous).&lt;br&gt;&lt;/td&gt;&lt;br /&gt;          &lt;/tr&gt;&lt;br /&gt;          &lt;tr&gt;&lt;br /&gt;            &lt;td width="19%" height="2"&gt;&lt;font color="#000066"&gt;&lt;b&gt;send&lt;/b&gt;&lt;/font&gt;(&amp;quot;string&amp;quot;)&lt;br /&gt;            &lt;/td&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td width="81%" height="2"&gt;null for a GET command (in native mode; null not passed with ActiveX)&lt;/td&gt;&lt;br /&gt;          &lt;/tr&gt;&lt;br /&gt;        &lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;Here is an example of a callback function which is registered via the onreadystatechange attribute.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;function processChange() {&lt;br /&gt;    // 4 means the response has been returned and ready to be processed&lt;br /&gt;    if (obj.readyState == 4) {&lt;br /&gt;        // 200 means "OK"&lt;br /&gt;        if (obj.status == 200) {&lt;br /&gt;            // process whatever has been sent back here:&lt;br /&gt;        // anything else means a problem&lt;br /&gt;        } else {&lt;br /&gt;            alert("There was a problem in the returned data:\n");&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;&lt;a name="Rest" id="Rest"&gt;&lt;/a&gt;The Rest of the Pieces&lt;/h4&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;Let's use the functions we presented above in a little application to show how all the pieces fit together.  We will&lt;br /&gt;allow a user to enter a user name, then send that name to a server to check that it is not in use by anyone else.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;First, our html:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&amp;lt;BODY&amp;gt;&lt;br /&gt;Enter your Username:  &amp;lt; id="username" name="username" type="text" onblur="checkUserName(this.value,'')" &amp;gt;&lt;br /&gt;&amp;lt;/BODY&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;And here is the missing piece on the client side: The function called from the html which gets the whole process going.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;function checkUserName(input, response) {&lt;br /&gt;  // if response is not empty, we have received data back from the server&lt;br /&gt;  if (response != '') {&lt;br /&gt;    // the value of response is returned from checkName.php: 1 means in use&lt;br /&gt;    if (response == '1') {&lt;br /&gt;       alert("username is in use");&lt;br /&gt;    } else {&lt;br /&gt;    //  if response is empty, we need to send the username to the server&lt;br /&gt;       url  =  'http://localhost/xml/checkName.php?q=' + input;&lt;br /&gt;       ProcessXML(url);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;Note that the response value must actually be parsed from either text or XML returned&lt;br /&gt;from the server.  The &lt;code&gt;processChange()&lt;/code&gt; callback receives the returned data.&lt;br /&gt;Here is a little more detail on what happens in that function:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;function processChange() {&lt;br /&gt;    // 4 means the response has been returned and ready to be processed&lt;br /&gt;    if (obj.readyState == 4) {&lt;br /&gt;        // 200 means "OK"&lt;br /&gt;        if (obj.status == 200) {&lt;br /&gt;            // process whatever has been sent back here:&lt;br /&gt;            // we need to parse the returned data (text or XML)&lt;br /&gt;            // and then call checkUserName again with response set&lt;br /&gt;            // to the appropriate value.&lt;br /&gt;        // anything else means a problem&lt;br /&gt;        } else {&lt;br /&gt;            alert("There was a problem in the returned data:\n");&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;All we need to make it all work is a server-side script or servlet to catch the GET request, do the check&lt;br /&gt;on the user name, and return the response.  Here is an example in PHP - everything is hard-coded which is&lt;br /&gt;not what it would really look like, but you get the idea.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&amp;lt;?php header('Content-Type: text/xml');&lt;br /&gt;&lt;br /&gt;function checkName($q) {&lt;br /&gt;  if (isset($q)){&lt;br /&gt;    switch(strtolower($q)) {&lt;br /&gt;      case  'maggie' :&lt;br /&gt;          return '1';&lt;br /&gt;          break;&lt;br /&gt;      ...&lt;br /&gt;      default:&lt;br /&gt;          return '0';&lt;br /&gt;    }&lt;br /&gt;  } else {&lt;br /&gt;    return '0';&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="Google" id="Google"&gt;Google and AJAX&lt;/a&gt;&lt;/h3&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;AJAX has gained popularity over the past few years due in part to Google's use of the technology&lt;br /&gt;in Gmail, Google Maps, and other web-based applications.  &lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;The interesting thing about this search capability is that users don't have to leave the page to do a search,&lt;br /&gt;as results are loaded right below the search box using AJAX. Search results are sorted into 4 different&lt;br /&gt;categories: local, web, video, and blogs, and can be displayed in a list or with tabs.&lt;br /&gt;In addition, users can use the copy button on results to add them to other content (such as blog&lt;br /&gt;post comments).&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="Examples" id="Examples"&gt;More Examples and Tutorials&lt;/a&gt;&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;Here are additional examples and tutorials on AJAX:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.modelworks.com/ajax.html"&gt;Beginner's Tutorial on AJAX&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.adaptivepath.com/publications/essays/archives/000385.php"&gt;Ajax: A New Approach to Web Applications&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://dhtmlnirvana.com/ajax/ajax_tutorial/"&gt;Ajax: What's It Good For?&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.webpasties.com/xmlHttpRequest/"&gt;Zip Code -&gt; City and State Example&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/XMLHttpRequest"&gt;Reference on XMLHttpRequest&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;!--&lt;br /&gt;google_ad_client = "pub-3214174784035837";&lt;br /&gt;google_ad_slot = "0076284463";&lt;br /&gt;google_ad_width = 468;&lt;br /&gt;google_ad_height = 60;&lt;br /&gt;//--&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&lt;br /&gt;src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;AJAX stands for &lt;strong&gt;A&lt;/strong&gt;synchronous &lt;strong&gt;J&lt;/strong&gt;avaScript &lt;strong&gt;A&lt;/strong&gt;nd &lt;strong&gt;X&lt;/strong&gt;ML.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;AJAX is a type of programming made popular in 2005 by Google (with Google   Suggest).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;AJAX is not a new programming language, but a new way to use existing   standards.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;With AJAX you can create better, faster, and more user-friendly web   applications.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;AJAX is based on JavaScript and HTTP requests.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3214174784035837";
/* 468x60, created 9/19/08 */
google_ad_slot = "8585310757";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8430600509278095130-6603033483739511696?l=ajaxphptutorial.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YO0a_31l4mfodmB5V148E8RzpmE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YO0a_31l4mfodmB5V148E8RzpmE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YO0a_31l4mfodmB5V148E8RzpmE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YO0a_31l4mfodmB5V148E8RzpmE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxPhpTutorial/~4/lAFEAYiDWPk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxphptutorial.blogspot.com/feeds/6603033483739511696/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8430600509278095130&amp;postID=6603033483739511696" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8430600509278095130/posts/default/6603033483739511696?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8430600509278095130/posts/default/6603033483739511696?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxPhpTutorial/~3/lAFEAYiDWPk/ajax-is-web-20-programming-technology.html" title="AJAX is WEB 2.0 programming technology" /><author><name>Larasati Srikandi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxphptutorial.blogspot.com/2008/08/ajax-is-web-20-programming-technology.html</feedburner:origLink></entry></feed>

