<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[七小木东]]></title> 
<link>http://www.qixiaomudong.cn/index.php</link> 
<description><![CDATA[七小木东]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[七小木东]]></copyright>
<item>
<link>http://www.qixiaomudong.cn/read.php?205</link>
<title><![CDATA[Ajax表单验证用户名是否存在]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[ajax]]></category>
<pubDate>Mon, 01 Dec 2008 03:19:43 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?205</guid> 
<description>
<![CDATA[ 
	做一个表单验证里面最简单的例子，检查用户名是否存在，使用Ajax完成表单验证的正常步骤应该是：<br/><br/>客户端收集表单信息。 <br/>使用XMLHttpRequest对象提交到服务器。 <br/>服务器完成验证的逻辑，返回结果信息。 <br/>浏览器端根据服务器返回的信息对用户做出一定的提示。 <br/>不过由于我的空间不支持任何服务器段语言，所以把本应在服务器的逻辑搬到了浏览器，由JavaScript来做，服务器只负责提供一个用户名的列表。最后的效果如下，试着输入test，cainiao8这些用户名，都会显示已注册。<br/><br/>JavaScript代码分析<br/>首先，当文档载入完毕的时候，给表格设置change事件的响应函数ajaxValidate，代码如下：<br/><br/><acronym title="">addEventSimple(window,'load',function()&#123;&nbsp;&nbsp;var test = document.getElementById('username');&nbsp;&nbsp;addEventSimple(test,'change',ajaxValidate);&#125;);</acronym><br/><br/>这样，当用户名文本框内的值改变之后，就会调用ajaxValidate函数，其代码如下：<br/><br/><acronym title="">function ajaxValidate()&#123;&nbsp;&nbsp;<br/>var options = &#123;&nbsp;&nbsp;&nbsp;&nbsp;<br/>url:'ajax/ajaxUsernames.xml',&nbsp;&nbsp;&nbsp;&nbsp;<br/>listener:callback,&nbsp;&nbsp;&nbsp;&nbsp;<br/>method:'GET'&nbsp;&nbsp;<br/>&#125;&nbsp;&nbsp;<br/>var request = createRequest(options);&nbsp;&nbsp;<br/>request.send(null);&#125;</acronym><br/><br/>它会使用之前介绍的createRequest函数初始化一个XMLHttpRequest对象，并且将它发送到服务器，请求ajaxUsernames.xml文件。<br/><br/>最后就是callback函数了：<br/><br/><acronym title="">function callback()&#123;<br/>&nbsp;&nbsp;var xmlDoc = this.responseXML;<br/>&nbsp;&nbsp;var root = xmlDoc.getElementsByTagName('root')[0];<br/>&nbsp;&nbsp;var nodes = root.getElementsByTagName("username");<br/>&nbsp;&nbsp;var currentNode = null;<br/>&nbsp;&nbsp;var username = document.getElementById('username').value;<br/>&nbsp;&nbsp;for(var i = 0; i < nodes.length; i++) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;currentNode = nodes[i];<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(username == currentNode.childNodes[0].nodeValue)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('test').innerHTML = '对不起!'+username+'已经被注册。';<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;document.getElementById('test').innerHTML = '用户名' + username +'可以使用!';&#125;</acronym><br/><br/>callback函数在已经存在的用户名搜索当前用户输入的名字，判断是否已经存在。<br/><br/>
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?109</link>
<title><![CDATA[spry]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[ajax]]></category>
<pubDate>Tue, 07 Oct 2008 09:20:45 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?109</guid> 
<description>
<![CDATA[ 
	Spry Framework是Adobe出品的轻量级的支持Ajax的JavaScript库，以HTML为中心，使用最基本的HTML、CSS和JavaScript来实现丰富Web页面体验。<br/><br/>这个轻量型的框架强调：“易用”。 <br/>1，使用spry框架，必须引用的两个核心js文件<br/><br/>代码<br/>&lt;script type="text/javascript" src="../../includes/xpath.js"&gt;&lt;/script&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&lt;script type="text/javascript" src="../../includes/SpryData.js"&gt;&lt;/script&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>2，创建一个数据器dataset<br/><br/>代码<br/>var dsPhotos = new Spry.Data.XMLDataSet("/photos.php", "/gallery/photos/photo", &#123; method: "POST", postData: "galleryid=2000&amp;offset=20&amp;limit=10", headers: &#123; "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" &#125; &#125;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>var dsPhotos2 = new Spry.Data.XMLDataSet("/photos.php?galleryid=2000", "/gallery/photos/photo");&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>method：为请求发送方式，POST / GET ；默认为GET <br/>postData：为请求参数，可省略，可直接把"/photos.php"换成/photos.php?galleryid=2000&amp;offset=20&amp;limit=10 <br/>Content-Type：为头信息<br/>3，不使用缓存<br/><br/>代码<br/>Var dsPhotos = new Spry.Data.XMLDataSet("/photos.php?galleryid=2000", "/gallery/photos/photo", &#123; useCache: false &#125;)&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>这里要重点说明一下，我在应用时，曾经发现设置不用缓存时，页面仍然不是最新数据，我是用一个servlet生成xml，然后对生成的数据进行删除和添加，但页面显示的数据不会自动更新。 <br/>后来在adobe的官方论坛上找到了答案，在IE中，使用userCache:false是不够的，还要在生成xml的jsp，php等中设置头不使用cache,如在生成xml的jsp/servlet中是要加上： <br/>response.addHeader("Cache-Control","no-cache"); <br/>以上问题只存在IE中，在firefox和opera中不存在。注，spry对opera9版本支持很好，使用版本8的朋友要注意了。 <br/>另外，也可以在构造完数据器后，再设置缓存：<br/><br/>代码<br/>dsData.useCache = false;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>dsData.loadData();&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/><br/>4，获取数据形式 <br/>假如我们上面的请求，返回的xml如下：<br/><br/>代码<br/>&lt;gallery id="12345"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;photographer id="4532"&gt;John Doe&lt;/photographer&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;email&gt;john@doe.com&lt;/email&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;photos id="2000"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;photo path="sun.jpg" width="16" height="16" /&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;photo path="tree.jpg" width="16" height="16" /&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;photo path="surf.jpg" width="16" height="16" /&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/photos&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&lt;/gallery&gt;&nbsp;&nbsp;&nbsp;&nbsp; <br/>那么“gallery/photos/photo”返回的数据是下面的数组： <br/>[ <br/>&#123; "@path": "sun.jpg", "@width": 16, "@height": 16 &#125;, <br/>&#123; "@path": "tree.jpg", "@width": 16, "@height": 16 &#125;, <br/>&#123; "@path": "surf.jpg", "@width": 16, "@height": 16 &#125; <br/>]<br/><br/><br/>代码<br/>var rows = dsPhotos.getData(); // 获取所有行.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>var path = rows[0]["@path"];&nbsp;&nbsp; // 获取第一行中"@path"的值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>dsPhotos.setCurrentRowNumber(2); // 将第3行做为当前处理行，下标以0开始&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>var id = dsPhotos.getData()[2]["ds_RowID"]; // 获取第3行的ID.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>dsPhotos.setCurrentRow(id); // 通过第3行的id，将第3行设为当前处理行.&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>5，排序<br/><br/>代码<br/>dsPhotos.sort("@path"); //以"@path"列的值为关健字对行排序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>dsPhotos.sort("@path", "toggle"); //"ascending", "descending"和"toggle"，默认是 "ascending"。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>var dsPhotos = new Spry.Data.XMLDataSet("/photos.php?galleryid=2000", "/gallery/photos/photo", &#123; sortOnLoad: "@path", sortOrderOnLoad: "descending" &#125;);//也可在数据构造器中设置初始排序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>dsPhotos.setColumnType("@width", "number");//设置类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>dsPhotos.setColumnType("@height", "number");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>dsPhotos.sort("@width"); // 对 "@width" 列数据进行排序.&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>6，去除重复<br/><br/>代码<br/>dsPhotos.distinct(); // Remove all duplicate rows.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>//distinct()方法是具有破坏性的，多余的行是被删掉的，如果你想再得到所有的包括重复的原始项就得重新载入XML数据。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>var dsPhotos = new Spry.Data.XMLDataSet("/photos.php?galleryid=2000", "/gallery/photos/photo", &#123; distinctOnLoad: true &#125;);//可在构造时预设&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>7，设置过滤器<br/><br/>代码<br/>var myFilterFunc = function(dataSet, row, rowNumber)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;if (row["@path"].search(/^s/) != -1)&nbsp;&nbsp;&nbsp;&nbsp;//只返回以s开头的行&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return row;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Return the row to keep it in the data set.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;return null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Return null to remove the row from the data set.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>dsPhotos.filterData(myFilterFunc); // Filter the rows in the data set.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>dsPhotos.filter(myFilterFunc); // 不破坏数据，是建一个新的数组&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>dsPhotos.filterData(null); // 取消过滤.&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>8，自动刷新，以毫秒为单位<br/><br/>代码<br/>var dsPhotos = new Spry.Data.XMLDataSet("/photos.php?galleryid=2000", "/gallery/photos/photo", &#123; useCache: false, loadInterval: 10000 &#125;);//在构造器设置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>dsPhotos.startLoadInterval(10000); // 设置自动刷新&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>dsPhotos.stopLoadInterval(); // 停止自动刷新&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>9，把类注册成观察器<br/><br/>代码<br/>var myObserver = new Object;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>myObserver.onDataChanged = function(dataSet, data)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//可支持:onPreLoad / onPostLoad / onLoadError / onDataChanged / onPreSort / onPostSort / onCurrentRowChanged&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>//第一个是发送通知的对象，做为数据器观察器，这个值永远都是dataSet对象。第二个参数可以不定义，也可以是一个对象(内置对象)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;alert("onDataChanged called!";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>dsPhotos.addObserver(myObserver);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>dsPhotos.removeObserver(myObserver);&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/>10，把函数方法注册为观察器<br/><br/>代码<br/>function myObserverFunc(notificationType, dataSet, data)　　//notfication,是通知器类型，dataSet是数据器对象，data是要观察的数据&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;if (notificationType == "onDataChanged")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("onDataChanged called!";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;else if (notificationType == "onPostSort")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("onPostSort called!";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>dsPhotos.addObserver(myObserverFunc);&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>11，动态区域块 <br/>所有使用Spry动态区域块的HTML页面都要在它们的&lt;html&gt;标签中加入xmlns:spry=http://ns.adobe.com/spry<br/>代码<br/>&lt;html xmlns="http://www.w3.org/1999/xhtml" xmlns:spry="http://ns.adobe.com/spry"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>.... ....&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp; .... ....&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;ul spry:region="dsPhotos"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;&#123;dsPhotos::path&#125;&lt;/li&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/ul&gt;&nbsp;&nbsp;&nbsp;&nbsp; <br/>COL, COLGROUP, FRAMESET, HTML, IFRAME, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR 不能设为动态区域<br/><br/>12，数据引用<br/>&#123;&lt;数据器名&gt;::&lt;数据器列名&gt;&#125;<br/>如果一个动态区域块只和一个数据器相关联，则你甚至可以省略掉数据器的名字 <br/>&lt;li&gt;&#123;@path&#125;&lt;/li&gt; <br/>ds_RowID - 这是数据器的行id。这个id可以帮我们指定数据器中的一个数据。它和数据是对应的，即使数据执行了排序操作，这个id和数据的对应关系也不会变化。 <br/>ds_RowNumber - 这是数据器当前数据的行号。 <br/>ds_RowNumberPlus1 - 这个与上面的ds_RowNumber相同，只不过它规定了数据的行号从1开始，而不是从0开始。 <br/>ds_RowCount - 它是数据器中数据的行的数量。如果使用了一个非破坏性的过滤器，则它的值是这个过滤器执行后得到的行的数量。 <br/>ds_UnfilteredRowCount - 在执行非破坏性过滤器前，数据器中行的数量。 <br/>ds_CurrentRowID - 当前行的id。这个值不会改变，除非使用了一个循环的构造。 <br/>ds_CurrentRowNumber - 当前行的行号。这个值不会改变，除非使用了一个循环的构造。 <br/>ds_SortColumn - 上一次排序所依赖的列名。如果这个数据器的数据还未进行过排序，则返回一个空字符串。 <br/>ds_SortOrder - 数据器中数据排序的参数，将返回三种字符串"ascending", "descending", 或空字符串.。 <br/>ds_EvenOddRow - 它返回的是"even"或"odd"，告诉我们ds_RowNumber的值是奇数还是偶数。 <br/>13，循环<br/><br/>代码<br/>//方式一：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&lt;li spry:repeat="dsPhotos"&gt;&#123;@path&#125;&lt;/li&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>//方式二：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&lt;ul spry:repeatchildren="dsPhotos"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&lt;li&gt;&#123;@path&#125;&lt;/li&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&lt;/ul&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>//只输出以s开头的 spry:test属性的值可以是任何等于0或非0值的JavaScript表达示。如果这个表达示返回非0值，这个内容将会被输出，相当于if &lt;&gt;0就输出后面元素。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&lt;li spry:repeat="dsPhotos" spry:test="'&#123;@path&#125;'.search(/^s/) != -1;"&gt;&#123;@path&#125;&lt;/li&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>14，if 条件<br/><br/>代码<br/>&lt;li spry:if="'&#123;@path&#125;'.search(/^s/) != -1;"&gt;&#123;@path&#125;&lt;/li&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>//if/else的形式，要使用"spry:choose"属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div spry:choose="spry:choose"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div spry:when="'&#123;@path&#125;' == 'surf.gif'"&gt;&#123;@path&#125;&lt;/div&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div spry:when="'&#123;@path&#125;' == 'undefined'"&gt;Path was not defined.&lt;/div&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div spry:default="spry:default"&gt;Unexpected value for path!&lt;/div&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>15，状态<br/><br/>代码<br/>&lt;div spry:region="dsEmployees"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;div spry:state="loading"&gt;正在载入数据 ...&lt;/div&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;div spry:state="error"&gt;数据载入失败!&lt;/div&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;ul spry:state="ready"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li spry:repeat="dsEmployees"&gt; &lt;/li&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/ul&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&lt;/div&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>16，通过对象将区域注册成观察者<br/><br/>代码<br/>myObserver = new Object;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>myObserver.onPostUpdate = function(notifier, data)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; alert("onPostUpdate called for " + data.regionID);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>// 调用addObserver() 将类注册为观察者.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>Spry.Data.Region.addObserver("employeeListRegion", myObserver);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>//注销&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>Spry.Data.Region.removeObserver("employeeListRegion", myObserver);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&lt;ul id="employeeListRegion" spry:region="dsEmployees"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&lt;/ul&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>17，以函数将区域注册成观察者<br/><br/>代码<br/>function myRegionCallback(notificationState, notifier, data)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (notificationType == "onPreUpdate") //onLoadingData / onPreUpdate / onPostUpdate / onError&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(regionID + " is starting an update!");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (notificationType == "onPostUpdate")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(regionID + " is done updating!");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>// 注册&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>Spry.Data.Region.addObserver("employeeListRegion", MyRegionCallback);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>// 注销&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>Spry.Data.Region.removeObserver("employeeListRegion", MyRegionCallback);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&lt;ul id="employeeListRegion" spry:region="dsEmployees"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&lt;/ul&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>18，主细节模式，同一数据器<br/><br/>代码<br/>&lt;span spry:region="dsEmployees"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&lt;select spry:repeatchildren="dsEmployees" onchange="dsEmployees.setCurrentRow(this.value)"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;option spry:if=" == 0" value="" selected="selected"&gt;&lt;/option&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;option spry:if=" != 0" value=""&gt;&lt;/option&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&lt;/select&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&lt;/span&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&lt;span spry:detailregion="dsEmployees"&gt;&#123;@id&#125; - - &lt;/span&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>//spry:detailregion"会在接收到"CurrentRowChanged"通知后改变自己的展示形式。&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>19，主细节模式，多个数据器<br/><br/>代码<br/>var dsStates = new Spry.Data.XMLDataSet("../../data/states/states.xml", "states/state");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>var dsCities = new Spry.Data.XMLDataSet("../../data/states/&#123;dsStates::url&#125;", "state/cities/city");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>//两个数据器有依赖关系，也可以用:"/webapp/cities.php?stateid=&#123;dsStates::@id&#125;".&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&lt;form name="selectForm"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>//State:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;span spry:region="dsStates" id="stateSelector"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;select spry:repeatchildren="dsStates" name="stateSelect" onchange="document.forms[0].citySelect.disabled = true; dsStates.setCurrentRow(this.value);"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;option spry:if=" == 0" value="" selected="selected"&gt;&lt;/option&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;option spry:if=" != 0" value=""&gt;&lt;/option&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/select&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/span&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>//City:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;span spry:region="dsCities" id="citySelector"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;select spry:repeatchildren="dsCities" name="citySelect"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;option spry:if=" == 0" value="" selected="selected"&gt;&lt;/option&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;option spry:if=" != 0" value=""&gt;&lt;/option&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/select&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/span&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&lt;/form&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br/>
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?106</link>
<title><![CDATA[AJAX 请求php页面]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[ajax]]></category>
<pubDate>Thu, 25 Sep 2008 09:44:59 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?106</guid> 
<description>
<![CDATA[ 
	AJAX 请求<br/><br/>在下面的 AJAX 例子中，我们将演示当用户向 web 表单中输入数据时，网页如何与在线的 web 服务器进行通信。<br/><br/>此例包括三张页面：<br/><br/>a simple HTML form <br/>a JavaScript <br/>a PHP page <br/>HTML 表单<br/><br/>这是 HTML 表单。它包含一个简单的 HTML 表单和指向 JavaScript 的链接：<br/><br/><br/><acronym title="null"><html><br/><head><br/><script src="clienthint.js"></script> <br/></head><br/><body><br/><br/><form> <br/>First Name:<br/><input type="text" id="txt1"<br/>onkeyup="showHint(this.value)"><br/></form><br/><br/><p>Suggestions: <span id="txtHint"></span></p><br/><br/></body><br/></html></acronym><br/><br/><br/>例子解释 - HTML 表单<br/><br/>正如您看到的，上面的 HTML 页面含有一个简单的 HTML 表单，其中带有一个名为 "txt1" 的输入字段。<br/><br/>该表单是这样工作的：<br/><br/>当用户在输入域中按下并松开按键时，会触发一个事件 <br/>当该事件被触发时，执行名为 showHint() 的函数 <br/>表单的下面是一个名为 "txtHint" 的 <span>。它用作 showHint() 函数所返回数据的占位符。 <br/> JavaScript<br/><br/>JavaScript 代码存储在 "clienthint.js" 文件中，它被链接到 HTML 文档：<br/><br/>var xmlHttp<br/><br/>function showHint(str)<br/>&#123;<br/>if (str.length==0)<br/>&nbsp;&nbsp;&#123; <br/>&nbsp;&nbsp;document.getElementById("txtHint").innerHTML=""<br/>&nbsp;&nbsp;return<br/>&nbsp;&nbsp;&#125;<br/>xmlHttp=GetXmlHttpObject()<br/>if (xmlHttp==null)<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;alert ("Browser does not support HTTP Request")<br/>&nbsp;&nbsp;return<br/>&nbsp;&nbsp;&#125; <br/>var url="gethint.php"<br/>url=url+"?q="+str<br/>url=url+"&sid="+Math.random()<br/>xmlHttp.onreadystatechange=stateChanged <br/>xmlHttp.open("GET",url,true)<br/>xmlHttp.send(null)<br/>&#125; <br/><br/>function stateChanged() <br/>&#123; <br/>if (xmlHttp.readyState==4 &#124;&#124; xmlHttp.readyState=="complete")<br/>&#123; <br/>document.getElementById("txtHint").innerHTML=xmlHttp.responseText <br/>&#125; <br/>&#125;<br/><br/>function GetXmlHttpObject()<br/>&#123;<br/>var xmlHttp=null;<br/>try<br/>&#123;<br/>// Firefox, Opera 8.0+, Safari<br/>xmlHttp=new XMLHttpRequest();<br/>&#125;<br/>catch (e)<br/>&#123;<br/>// Internet Explorer<br/>try<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");<br/>&nbsp;&nbsp;&#125;<br/>catch (e)<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");<br/>&nbsp;&nbsp;&#125;<br/>&#125;<br/>return xmlHttp;<br/>&#125;<br/>例子解释:<br/><br/>showHint() 函数 <br/><br/>每当在输入域中输入一个字符，该函数就会被执行一次。<br/><br/>如果文本框中有内容 (str.length > 0)，该函数这样执行：<br/><br/>定义要发送到服务器的 URL（文件名） <br/>把带有输入域内容的参数 (q) 添加到这个 URL <br/>添加一个随机数，以防服务器使用缓存文件 <br/>调用 GetXmlHttpObject 函数来创建 XMLHTTP 对象，并在事件被触发时告知该对象执行名为 stateChanged 的函数 <br/>用给定的 URL 来打开打开这个 XMLHTTP 对象 <br/>向服务器发送 HTTP 请求 <br/>如果输入域为空，则函数简单地清空 txtHint 占位符的内容。<br/><br/>stateChanged() 函数 <br/><br/>每当 XMLHTTP 对象的状态发生改变，则执行该函数。<br/><br/>在状态变成 4 （或 "complete"）时，用响应文本填充 txtHint 占位符 txtHint 的内容。<br/><br/>GetXmlHttpObject() 函数 <br/><br/>AJAX 应用程序只能运行在完整支持 XML 的 web 浏览器中。<br/><br/>上面的代码调用了名为 GetXmlHttpObject() 的函数。<br/><br/>该函数的作用是解决为不同浏览器创建不同 XMLHTTP 对象的问题。<br/><br/>PHP 页面<br/><br/>被 JavaScript 代码调用的服务器页面是一个名为 "gethint.php" 的简单服务器页面。<br/><br/>"gethint.php" 中的代码会检查名字数组，然后向客户端返回对应的名字：<br/><br/><?php<br/>// Fill up array with names<br/>$a[]="Anna";<br/>$a[]="Brittany";<br/>$a[]="Cinderella";<br/>$a[]="Diana";<br/>$a[]="Eva";<br/>$a[]="Fiona";<br/>$a[]="Gunda";<br/>$a[]="Hege";<br/>$a[]="Inga";<br/>$a[]="Johanna";<br/>$a[]="Kitty";<br/>$a[]="Linda";<br/>$a[]="Nina";<br/>$a[]="Ophelia";<br/>$a[]="Petunia";<br/>$a[]="Amanda";<br/>$a[]="Raquel";<br/>$a[]="Cindy";<br/>$a[]="Doris";<br/>$a[]="Eve";<br/>$a[]="Evita";<br/>$a[]="Sunniva";<br/>$a[]="Tove";<br/>$a[]="Unni";<br/>$a[]="Violet";<br/>$a[]="Liza";<br/>$a[]="Elizabeth";<br/>$a[]="Ellen";<br/>$a[]="Wenche";<br/>$a[]="Vicky";<br/><br/>//get the q parameter from URL<br/>$q=$_GET["q"];<br/><br/>//lookup all hints from array if length of q>0<br/>if (strlen($q) > 0)<br/>&#123;<br/>$hint="";<br/>for($i=0; $i<count($a); $i++)<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($hint=="")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$hint=$a[$i];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$hint=$hint." , ".$a[$i];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&#125;<br/>&#125;<br/><br/>//Set output to "no suggestion" if no hint were found<br/>//or to the correct values<br/>if ($hint == "")<br/>&#123;<br/>$response="no suggestion";<br/>&#125;<br/>else<br/>&#123;<br/>$response=$hint;<br/>&#125;<br/><br/>//output the response<br/>echo $response;<br/>?><br/>如果存在从 JavaScript 送来的文本 (strlen($q) > 0)，则：<br/><br/>找到与 JavaScript 所传送的字符相匹配的名字 <br/>如果找到多个名字，把所有名字包含在 response 字符串中 <br/>如果没有找到匹配的名字，把 response 设置为 "no suggestion" <br/>如果找到一个或多个名字，把 response 设置为这些名字 <br/>把 response 发送到 "txtHint" 占位符 <br/>
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?53</link>
<title><![CDATA[php的ajax框架xajax入门与试用]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[ajax]]></category>
<pubDate>Wed, 23 Jul 2008 08:20:08 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?53</guid> 
<description>
<![CDATA[ 
	一、xajax与其它ajax框架的比较<br/>xajax功能很简单，但很灵活！~它不象其它一些大的框架，功能确实强大，但执行速度不敢恭维。功能虽多，但不够灵活。api多，学起来简直如同学习一门新的语言。<br/><br/>二、xajax功能介绍<br/>xajax的功能比较简单，但就因为简单，所以灵活。同时，这也要求使用者要对javascrīpt / vbs 客户端脚本有一定的了解。因为它的功能是比较活的。可以说单纯使用xajax，什么也做不出，但配合js / vbs 又什么都做的出。<br/>xajax主要是使用xajaxResponse这个类，它提供了一些方法，举例如下：<br/>1、addAlert($sMsg) <br/>弹出警告<br/>2、addscrīpt($sJS)<br/>执行某段js<br/>3、$objResponse-&gt;addAssign(&quot;&quot;,&quot;&quot;,&quot;&quot;)<br/>给页面中的某个元素附值，或者修改其属性<br/>等等。。。。<br/><br/>所以xajax不是死的，它不能做出XXX XXX功能来，但是它可以灵活的控制客户端的js / vbs，去完成我们要实现的效果。<br/><br/>三、xajax安装配置<br/>不需要特别的安装和配置，只要下载其文件包，解压到网站目录中<br/>下载地址：<br/>http://www.xajaxproject.org/<br/><br/>三、用xajax做会员注册和登陆<br/>1、数据库<br/>采用mysql5.0，数据库名zl 表名zl_user&nbsp;&nbsp;&nbsp;&nbsp;表结构<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int(11)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auto_increment<br/>zl_user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; varchar(50)<br/>zl_pwd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; varchar(50)<br/>email&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; varchar(50)<br/></div></div><br/><br/>2、reg.php&nbsp;&nbsp;&nbsp;&nbsp;注册文件(内有说明)<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>&lt;?php<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; require_once(&quot;inc/xajax.inc.php&quot;); <br/>//使用xajax则必须首先引入xajax.inc.php<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $xajax = new xajax(&quot;inc/signup.php&quot;);<br/>//创建一个xajax对象，为singup.php<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $xajax-&gt;registerFunction(&quot;processForm&quot;);<br/>//使用singup.php里的processForm函数<br/>?&gt;<br/>&lt;head&gt;<br/>&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot; /&gt;<br/>&lt;link rel=&quot;stylesheet&quot; href=&quot;http://blogbeta.blueidea.com/css/style.css&quot; _fcksavedurl=&quot;&quot;http://blogbeta.blueidea.com/css/style.css&quot;&quot; type=&quot;text/css&quot;&gt;<br/>&lt;title&gt;无标题文档&lt;/title&gt;&nbsp;&nbsp; <br/>&lt;?php $xajax-&gt;printJavascrīpt(&#039;inc/&#039;); ?&gt;&nbsp;&nbsp;<br/>&lt;scrīpt type=&quot;text/javascrīpt&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function submitSignup()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xajax.$(&#039;submitButton&#039;).disabled=true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xajax.$(&#039;submitButton&#039;).value=&quot;http://blogbeta.blueidea.com/wait...&quot;;<br/>//修改id为submitButton的属性<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xajax_processForm(xajax.getFormValues(&quot;signupForm&quot;));<br/>//这里xajax_ 后面跟要使用哪个函数这里是 processForm，后面跟的是signupForm这个表单各项的集合<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&lt;/scrīpt&gt;<br/>&lt;/head&gt;<br/>&lt;body &gt;&lt;form id=&quot;signupForm&quot; action=&quot;javascrīpt:void(null);&quot; ōnSubmit=&quot;submitSignup();&quot;&gt;&nbsp;&nbsp;<br/>&lt;div id=&quot;main&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &lt;div id=&quot;m1&quot;&gt;用 户 注 册&lt;/div&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &lt;div id=&quot;formDiv&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;5&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td align=&quot;right&quot;&gt; &lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt; &lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width=&quot;31%&quot; align=&quot;right&quot;&gt;用户名：&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width=&quot;69%&quot;&gt;&lt;input name=&quot;usr&quot; type=&quot;text&quot; id=&quot;usr&quot; /&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td align=&quot;right&quot;&gt;密码：&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;input name=&quot;pwd&quot; type=&quot;password&quot; id=&quot;pwd&quot; /&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td align=&quot;right&quot;&gt;密码：&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;input name=&quot;pwd2&quot; type=&quot;password&quot; id=&quot;pwd2&quot; /&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td align=&quot;right&quot;&gt;Email：&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;input name=&quot;email&quot; type=&quot;text&quot; id=&quot;email&quot; /&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 可用于找回密码&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr align=&quot;center&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td colspan=&quot;2&quot;&gt;&lt;input type=&quot;submit&quot; name=&quot;submitButton&quot; value=&quot;提交&quot; class=&quot;button&quot; /&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type=&quot;reset&quot; name=&quot;Submit2&quot; value=&quot;重置&quot; class=&quot;button&quot; /&gt;&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/table&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br/>&lt;/div&gt;<br/>&lt;/form&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;<br/></div></div><br/><br/>点提交后执行singup.php里的processForm函数<br/><br/>3、inc/singup.php<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>&lt;?php<br/>define (&#039;XAJAX_DEFAULT_CHAR_ENCODING&#039;, &#039;gb2312&#039; );<br/>//注意这里，必须要设置gb2312，不然中文会乱码<br/>require_once(&quot;xajax.inc.php&quot;); <br/>require_once(&quot;function.php&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>$xajax = new xajax();<br/>$xajax-&gt;registerFunction(&quot;processForm&quot;);<br/>//同reg.php文件<br/><br/>function processForm($aFormValues)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; $objResponse = new xajaxResponse();<br/>&nbsp;&nbsp;&nbsp;&nbsp; require_once(&quot;conn.php&quot;);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; $usr=$aFormValues[&#039;usr&#039;];&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; $email=$aFormValues[&#039;email&#039;];<br/>&nbsp;&nbsp;&nbsp;&nbsp; $pwd=$aFormValues[&#039;pwd&#039;];<br/>&nbsp;&nbsp;&nbsp;&nbsp; $pw=Md5($pwd);&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; $errmsg=&quot;&quot;; <br/>&nbsp;&nbsp;&nbsp;&nbsp; //要过滤的非法字符 <br/>&nbsp;&nbsp;&nbsp;&nbsp; $ArrFiltrate=array(&quot;&#039;&quot;,&quot;;&quot;,&quot;union&quot;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach($aFormValues as $key=&gt;$value)&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (FunStringExist($value,$ArrFiltrate))&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objResponse-&gt;addAlert(&quot;输入的信息含有非法字符&#92;&quot;&#039; ; union!&#92;&quot;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objResponse-&gt;addAssign(&quot;submitButton&quot;,&quot;value&quot;,&quot;继续&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objResponse-&gt;addAssign(&quot;submitButton&quot;,&quot;disabled&quot;,false);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $objResponse;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (trim($usr) == &quot;&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$errmsg.=&quot;请输入用户名!&#92;n&quot;;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (trim($pwd) == &quot;&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$errmsg.=&quot;请输入密码!&#92;n&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($pwd != $aFormValues[&#039;pwd2&#039;])<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$errmsg.=&quot;两次输入的密码不一致!&#92;n&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!CheckEmailAddr($email))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$errmsg.=&quot;邮件地址不正确!&#92;n&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql=&quot;select * from zl_usr where zl_usr=&#039;$usr&#039;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result=mysql_query($sql,$db); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($myrow=mysql_fetch_array($result))&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$errmsg.=&quot;用户名已经存在!&#92;n&quot;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($errmsg==&quot;&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sForm = &quot;注册成功&lt;br&gt;用户名:&quot;.$usr.&quot;&lt;br&gt;email:&quot;.$email.&quot;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql=&quot;insert into zl_usr(zl_usr,zl_pwd,email) values(&#039;$usr&#039;,&#039;$pw&#039;,&#039;$email&#039;)&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result=mysql_query($sql,$db);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objResponse-&gt;addAssign(&quot;formDiv&quot;,&quot;innerHTML&quot;,$sForm);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objResponse-&gt;addAlert($errmsg);&nbsp;&nbsp;<br/>//弹出错误信息<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objResponse-&gt;addAssign(&quot;submitButton&quot;,&quot;value&quot;,&quot;继续&quot;);<br/>//修改submitButton的value为继续<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objResponse-&gt;addAssign(&quot;submitButton&quot;,&quot;disabled&quot;,false);<br/>//修改submitButton这个按扭的属性<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $objResponse;<br/>&#125;<br/><br/><br/>$xajax-&gt;processRequests();<br/>?&gt;<br/></div></div><br/><br/>这个文件中对信息进行了有效性判断，包括：用户名是否已经注册过、信息中是否有非法字符、邮件地址是否正确、两次输入的密码是否一致，如果没有错误则输入到数据库中，并<br/>$objResponse-&gt;addAssign(&quot;formDiv&quot;,&quot;innerHTML&quot;,$sForm);<br/>在formDiv中重新插入代码，内容为$sForm <br/>$sForm = &quot;注册成功&lt;br&gt;用户名:&quot;.$usr.&quot;&lt;br&gt;email:&quot;.$email.&quot;&quot;;<br/><br/>如果有错误信息则<br/>$objResponse-&gt;addAlert($errmsg);&nbsp;&nbsp;<br/>//弹出错误信息<br/>$objResponse-&gt;addAssign(&quot;submitButton&quot;,&quot;value&quot;,&quot;继续&quot;);<br/>$objResponse-&gt;addAssign(&quot;submitButton&quot;,&quot;disabled&quot;,false);<br/>//修改submitButton这个按扭的属性<br/><br/>3、login.php 登陆文件<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>&lt;?php<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; require_once(&quot;inc/xajax.inc.php&quot;); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $xajax = new xajax(&quot;inc/login.php&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $xajax-&gt;registerFunction(&quot;processForm&quot;);<br/>?&gt;<br/>&lt;head&gt;<br/>&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot; /&gt;<br/>&lt;link rel=&quot;stylesheet&quot; href=&quot;http://blogbeta.blueidea.com/css/style.css&quot; _fcksavedurl=&quot;&quot;http://blogbeta.blueidea.com/css/style.css&quot;&quot; type=&quot;text/css&quot;&gt;<br/>&lt;title&gt;无标题文档&lt;/title&gt;&nbsp;&nbsp; <br/>&lt;?php $xajax-&gt;printJavascrīpt(&#039;inc/&#039;); ?&gt;&nbsp;&nbsp;<br/>&lt;scrīpt type=&quot;text/javascrīpt&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function submitSignup()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xajax.$(&#039;submitButton&#039;).disabled=true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xajax.$(&#039;submitButton&#039;).value=&quot;http://blogbeta.blueidea.com/wait...&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xajax_processForm(xajax.getFormValues(&quot;signupForm&quot;));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&lt;/scrīpt&gt;<br/>&lt;/head&gt;<br/>&lt;body &gt;&lt;form id=&quot;signupForm&quot; action=&quot;javascrīpt:void(null);&quot; ōnSubmit=&quot;submitSignup();&quot;&gt;&nbsp;&nbsp;<br/>&lt;div id=&quot;main&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &lt;div id=&quot;m1&quot;&gt;用 户 登 陆&lt;/div&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &lt;div id=&quot;formDiv&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;5&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td align=&quot;right&quot;&gt; &lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt; &lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width=&quot;31%&quot; align=&quot;right&quot;&gt;用户名：&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width=&quot;69%&quot;&gt;&lt;input name=&quot;usr&quot; type=&quot;text&quot; id=&quot;usr&quot; /&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td align=&quot;right&quot;&gt;密码：&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;input name=&quot;pwd&quot; type=&quot;password&quot; id=&quot;pwd&quot; /&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr align=&quot;center&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td colspan=&quot;2&quot;&gt;&lt;input type=&quot;submit&quot; name=&quot;submitButton&quot; value=&quot;提交&quot; class=&quot;button&quot; /&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type=&quot;reset&quot; name=&quot;Submit2&quot; value=&quot;重置&quot; class=&quot;button&quot; /&gt;&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/table&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br/>&lt;/div&gt;<br/>&lt;/form&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;<br/></div></div><br/><br/>4、inc/login.php&nbsp;&nbsp;&nbsp;&nbsp;登陆用的处理文件<br/><br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>&lt;?php<br/>define (&#039;XAJAX_DEFAULT_CHAR_ENCODING&#039;, &#039;gb2312&#039; );<br/>require_once(&quot;xajax.inc.php&quot;); <br/>require_once(&quot;function.php&quot;);&nbsp;&nbsp;<br/>$xajax = new xajax();<br/>$xajax-&gt;registerFunction(&quot;processForm&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>function processForm($aFormValues)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; $objResponse = new xajaxResponse();<br/>&nbsp;&nbsp;&nbsp;&nbsp; require_once(&quot;conn.php&quot;);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; $usr=$aFormValues[&#039;usr&#039;];&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; $email=$aFormValues[&#039;email&#039;];<br/>&nbsp;&nbsp;&nbsp;&nbsp; $pwd=$aFormValues[&#039;pwd&#039;];<br/>&nbsp;&nbsp;&nbsp;&nbsp; $pw=Md5($pwd);&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; $errmsg=&quot;&quot;; <br/>&nbsp;&nbsp;&nbsp;&nbsp; //要过滤的非法字符 <br/>&nbsp;&nbsp;&nbsp;&nbsp; $ArrFiltrate=array(&quot;&#039;&quot;,&quot;;&quot;,&quot;union&quot;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach($aFormValues as $key=&gt;$value)&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (FunStringExist($value,$ArrFiltrate))&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objResponse-&gt;addAlert(&quot;输入的信息含有非法字符&#92;&quot;&#039; ; union!&#92;&quot;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objResponse-&gt;addAssign(&quot;submitButton&quot;,&quot;value&quot;,&quot;继续&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objResponse-&gt;addAssign(&quot;submitButton&quot;,&quot;disabled&quot;,false);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $objResponse;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (trim($usr) == &quot;&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$errmsg.=&quot;请输入用户名!&#92;n&quot;;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (trim($pwd) == &quot;&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$errmsg.=&quot;请输入密码!&#92;n&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql=&quot;select * from zl_usr where zl_usr=&#039;$usr&#039; and zl_pwd=&#039;$pw&#039;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result=mysql_query($sql,$db); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!$myrow=mysql_fetch_array($result))&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$errmsg.=&quot;用户名不存在,或密码错误!&#92;n&quot;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($errmsg==&quot;&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sForm = &quot;登陆成功&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objResponse-&gt;addAssign(&quot;formDiv&quot;,&quot;innerHTML&quot;,$sForm);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objResponse-&gt;addAlert($errmsg);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objResponse-&gt;addAssign(&quot;submitButton&quot;,&quot;value&quot;,&quot;继续&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objResponse-&gt;addAssign(&quot;submitButton&quot;,&quot;disabled&quot;,false);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $objResponse;<br/>&#125;<br/><br/><br/>$xajax-&gt;processRequests();<br/>?&gt;<br/><br/></div></div><br/><br/>登陆于注册原理差不多，就不废话了：）<br/><br/>另外下面是两个用到的文件代码 conn.php&nbsp;&nbsp;&nbsp;&nbsp;function.php<br/>conn.php<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>&lt;?php<br/>$database=&quot;zl&quot;;//MYSQL数据库名<br/>$db = mysql_connect(&quot;127.0.0.1&quot;, &quot;root&quot;,&quot;123456&quot;);//MYSQL数据库用户名和密码<br/>mysql_select_db($database,$db);<br/>?&gt;<br/>function.php<br/><br/>&lt;?php<br/>&nbsp;&nbsp;&nbsp;&nbsp;function CheckEmailAddr($C_mailaddr) <br/>&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!eregi(&quot;^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$&quot;, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$C_mailaddr)) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true; <br/>&#125; <br/>//是否存在数组中的值 <br/>function FunStringExist($StrFiltrate,$ArrFiltrate)&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach ($ArrFiltrate as $key=&gt;$value)&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (eregi($value,$StrFiltrate))&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false; <br/>&#125; <br/>?&gt;<br/><br/></div></div><br/><br/><br/>
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?33</link>
<title><![CDATA[一个很好的jquery的教程，值得大家去看一下，接下来的几天我会在学习中对其进行解释]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[ajax]]></category>
<pubDate>Mon, 07 Jul 2008 09:50:01 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?33</guid> 
<description>
<![CDATA[ 
	一个很好的jquery的教程，值得大家去看一下，接下来的几天我会在学习中对其进行解释<br/>http://wiki.jquery.org.cn/doku.php?id=jquery%E4%B8%AD%E6%96%87%E6%8C%87%E5%AF%BC:15%E5%A4%A9%E5%AD%A6%E4%BC%9Ajquery_2
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?30</link>
<title><![CDATA[Ajax信息反馈显示(类似GMAIL、126等)]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[ajax]]></category>
<pubDate>Mon, 07 Jul 2008 07:03:15 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?30</guid> 
<description>
<![CDATA[ 
	&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd&quot;&gt;<br/>&lt;!-- saved from url=(0044)http://www.qqip.cn --&gt;<br/>&lt;HTML xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;&lt;HEAD&gt;&lt;TITLE&gt;new document&lt;/TITLE&gt;<br/>&lt;META http-equiv=Content-Type content=&quot;text/html; charset=gb2312&quot;&gt;<br/>&lt;META content=&quot;MSHTML 6.00.2900.2180&quot; name=GENERATOR&gt;<br/>&lt;META content=&quot;&quot; name=author&gt;<br/>&lt;META content=&quot;&quot; name=keywords&gt;<br/>&lt;META content=&quot;&quot; name=description&gt;<br/>&lt;STYLE type=text/css&gt;#show_feedBack_message &#123;<br/>BORDER-RIGHT: #f00 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #f00 1px solid; PADDING-LEFT: 3px; FONT-SIZE: 12px; BACKGROUND: #fc0; PADDING-BOTTOM: 3px; BORDER-LEFT: #f00 1px solid; LINE-HEIGHT: 18px; PADDING-TOP: 3px; BORDER-BOTTOM: #f00 1px solid<br/>&#125;<br/>&#123;<br/>FONT-SIZE: 12px<br/>&#125;<br/>OL LI &#123;<br/>MARGIN: 15px 0px<br/>&#125;<br/>OL LI A &#123;<br/>FONT-SIZE: 14px; COLOR: #00f<br/>&#125;<br/>&lt;/STYLE&gt;<br/>&lt;/HEAD&gt;<br/>&lt;BODY&gt;<br/>&lt;SCRIPT type=text/javascript&gt;<br/>&lt;!--<br/>/*<br/>message:要显示的消息<br/>x,y:显示消息框的坐标,默认为左上角<br/>delay:延迟多长时间消失，-1为永不消失，单位为毫秒<br/>*/<br/>function feedBackMessage(message,x,y,delay)&#123;<br/>if(!message) return;<br/>//只允许百分数或数值参数<br/>x=/&#92;d&#123;1,2&#125;%&#124;100%&#124;left&#124;right/.test(x)?x:(parseInt(x)&#124;&#124;0)+&quot;px&quot;;<br/>y=/&#92;d&#123;1,2&#125;%&#124;100%&#124;top&#124;bottom/.test(y)?y:(parseInt(y)&#124;&#124;0)+&quot;px&quot;;<br/>delay=parseInt(delay)&#124;&#124;-1;<br/>var fdDiv=document.getElementById(&#039;show_feedBack_message&#039;);<br/>if(!fdDiv)&#123;<br/>var showMessage=document.createElement(&quot;&lt;div id=&#039;show_feedBack_message&#039; style=&#039;z-index:10000;filter:alpha(opacity=100);position:absolute;white-space:nowrap&#039;&gt;&lt;/div&gt;&quot;);<br/>document.body.appendChild(showMessage);<br/>fdDiv=document.getElementById(&#039;show_feedBack_message&#039;);<br/>&#125;<br/><br/>if(feedBackMessage.timer)&#123;clearInterval(feedBackMessage.timer)&#125;<br/>fdDiv.innerHTML=message;<br/>fdDiv.style.display=&quot;&quot;;<br/>var docWidth=document.documentElement.scrollWidth&gt;document.documentElement.clientWidth?document.documentElement.scrollWidth:document.documentElement.clientWidth;<br/>var docHeight=document.documentElement.scrollHeight&gt;document.documentElement.clientHeight?document.documentElement.scrollHeight:document.documentElement.clientHeight;<br/>if(/left&#124;right/.test(x))&#123;<br/>x=(x==&quot;left&quot;)?&quot;0px&quot;:(docWidth-fdDiv.offsetWidth)+&quot;px&quot;;<br/>&#125;<br/>if(/top&#124;bottom/.test(y))&#123;<br/>y=(y==&quot;top&quot;)?&quot;0px&quot;:(docHeight-fdDiv.offsetHeight)+&quot;px&quot;;<br/>&#125;<br/>fdDiv.style.left=x;<br/>fdDiv.style.top=y;<br/>fdDiv.filters.Alpha.Opacity=100;<br/><br/>//渐隐效果<br/>var step=parseInt(delay/100);<br/>var alpha=fdDiv.filters.Alpha.Opacity;<br/>if(delay!=-1)&#123;<br/>feedBackMessage.timer=setInterval(function()&#123;<br/>if(fdDiv.filters.Alpha.Opacity&gt;0)&#123;<br/>fdDiv.filters.Alpha.Opacity--<br/>&#125;else&#123;<br/>clearInterval(feedBackMessage.timer);<br/>fdDiv.style.display=&quot;none&quot;<br/>&#125;<br/>&#125;,step);<br/>&#125;<br/>&#125;<br/>//--&gt;<br/>&lt;/SCRIPT&gt;<br/><br/>&lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;<br/>&lt;DIV style=&quot;MARGIN: 15px auto; WIDTH: 96%; TEXT-ALIGN: left&quot;&gt;<br/>&lt;OL&gt;<br/>&lt;LI&gt;(默认设置)显示位置：左上角 消失时间：不消失&lt;BR&gt;&lt;BR&gt;&lt;A <br/>onclick=&quot;feedBackMessage(&#039;消息提示测试1......&#039;);return false&quot; <br/>href=&quot;http://ajaxbbs.net/test/feedBackMessage.html#&quot;&gt;feedBackMessage(&#039;消息提示测试......&#039;)&lt;/A&gt; <br/><br/>&lt;LI&gt;显示位置：left:200px,top:200px 消失时间：5秒后&lt;BR&gt;&lt;BR&gt;&lt;A <br/>onclick=&quot;feedBackMessage(&#039;消息提示测试1......&#039;,&#039;200&#039;,&#039;200&#039;,5000);return false&quot; <br/>href=&quot;http://ajaxbbs.net/test/feedBackMessage.html#&quot;&gt;feedBackMessage(&#039;消息提示测试1......&#039;,&#039;200&#039;,&#039;200&#039;,5000)&lt;/A&gt; <br/><br/>&lt;LI&gt;显示位置：页面右上部 消失时间：3秒后&lt;BR&gt;&lt;BR&gt;&lt;A <br/>onclick=&quot;feedBackMessage(&#039;消息提示测试2......&#039;,&#039;right&#039;,&#039;top&#039;,3000);return false&quot; <br/>href=&quot;http://ajaxbbs.net/test/feedBackMessage.html#&quot;&gt;feedBackMessage(&#039;消息提示测试2......&#039;,&#039;right&#039;,&#039;top&#039;,3000)&lt;/A&gt; <br/><br/>&lt;LI&gt;显示位置：left:50%,top:50% 消失时间：2秒后&lt;BR&gt;&lt;BR&gt;&lt;A <br/>onclick=&quot;feedBackMessage(&#039;&lt;a href=&#92;&#039;#&#92;&#039;&gt;消息&lt;/a&gt;提示测试3......&#039;,&#039;50%&#039;,&#039;50%&#039;,2000);return false&quot; <br/>href=&quot;http://ajaxbbs.net/test/feedBackMessage.html#&quot;&gt;feedBackMessage(&#039;&lt;a <br/>href=#&gt;消息&lt;/a&gt;提示测试3......&#039;,&#039;50%&#039;,&#039;50%&#039;,2000)&lt;/A&gt; <br/>&lt;LI&gt;显示位置：left:500px,top:200px 消失时间：不消失&lt;BR&gt;&lt;BR&gt;&lt;A <br/>onclick=&quot;feedBackMessage(&#039;消息提示测试4......&#039;,&#039;500&#039;,&#039;200&#039;,-1);return false&quot; <br/>href=&quot;http://ajaxbbs.net/test/feedBackMessage.html#&quot;&gt;feedBackMessage(&#039;&lt;a <br/>href=#&gt;消息&lt;/a&gt;提示测试4......&#039;,&#039;500&#039;,&#039;200&#039;,-1)&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;<br/>&lt;DIV <br/>style=&quot;FONT-SIZE: 14px; MARGIN: 15px auto; WIDTH: 96%; LINE-HEIGHT: 20px; TEXT-ALIGN: left&quot;&gt;函数语法：feedBackMessage(Message,X,Y,Delay) <br/>&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;参数介绍：&lt;/STRONG&gt; &lt;BR&gt;&lt;U&gt;Message：&lt;/U&gt;必填参数。该参数为要显示的消息内容，可以为html内容 <br/>&lt;BR&gt;&lt;U&gt;X：&lt;/U&gt;水平方向的位置，可以是数值如50，250等，也可以是百分比如50%，或者是以下两个参数：left(信息框左侧紧邻页面左侧),right(信息框右侧紧邻页面右侧)。默认为left。 <br/>&lt;BR&gt;&lt;U&gt;Y：&lt;/U&gt;垂直方向的位置，可以是数值，也可以是百分比，或者是以下两个参数：top(信息框顶部紧邻页面顶部),bottom(信息框底部紧邻页面底部)。默认为top。 <br/>&lt;BR&gt;&lt;U&gt;Delay：&lt;/U&gt;显示时间，即多长时间后消失，单位为毫秒，如5000即5秒后消失，设定为-1则永不消失。默认为-1 <br/>&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;
]]>
</description>
</item>
</channel>
</rss>