﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-东人EP的内陆空间！-随笔分类-Ajax</title><link>http://www.cnitblog.com/eastperson/category/3008.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Sep 2011 23:08:02 GMT</lastBuildDate><pubDate>Wed, 28 Sep 2011 23:08:02 GMT</pubDate><ttl>60</ttl><item><title>Ajax的一个简单例子！</title><link>http://www.cnitblog.com/eastperson/archive/2006/11/15/19175.html</link><dc:creator>东人EP</dc:creator><author>东人EP</author><pubDate>Wed, 15 Nov 2006 01:52:00 GMT</pubDate><guid>http://www.cnitblog.com/eastperson/archive/2006/11/15/19175.html</guid><wfw:comment>http://www.cnitblog.com/eastperson/comments/19175.html</wfw:comment><comments>http://www.cnitblog.com/eastperson/archive/2006/11/15/19175.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/eastperson/comments/commentRss/19175.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eastperson/services/trackbacks/19175.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<b>
						<span style="COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: Tahoma">实例</span>
				</b>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: Tahoma">以下是我所写的一个简单的例子</span>
				<span lang="EN-US" style="COLOR: #666666; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: Tahoma">:</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">一、</span>
				<span lang="EN-US" style="COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">ajaxServlet.java</span>
				<span style="COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">程序清单</span>
				<span lang="EN-US" style="COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">:</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">package com;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">import java.io.IOException;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">import java.io.PrintWriter;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">import javax.servlet.ServletException;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">import javax.servlet.http.HttpServlet;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">import javax.servlet.http.HttpServletRequest;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">import javax.servlet.http.HttpServletResponse;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">/*<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">*------------------------------------------------------<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">* </span>
				<span style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">文件名<span lang="EN-US">: ajaxServlet.java<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">* </span>
				<span style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">创建日期<span lang="EN-US">: <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /?><st1:chsdate w:st="on" year="2005" month="10" day="25" islunardate="False" isrocdate="False">2005-10-25</st1:chsdate><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">* </span>
				<span style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">原作者<span lang="EN-US">: miaohai<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">* </span>
				<span style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">版权所有<span lang="EN-US">:<span style="mso-spacerun: yes">  </span>miaohai<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">* </span>
				<span style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">功能说明<span lang="EN-US">: </span>生成<span lang="EN-US">XML</span>文档<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">*<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">* </span>
				<span style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">修改记录<span lang="EN-US">:N/A<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">*------------------------------------------------------<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">*/<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">public class ajaxServlet extends HttpServlet{<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes"> </span>private static final String CONTENT_TYPE="text/xml; charset=gb2312";<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes"> </span>public void init() throws ServletException{<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes"> </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes"> </span>public void doGet(HttpServletRequest request,HttpServletResponse response)<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">   </span>throws ServletException,IOException{<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">     </span>response.setContentType(CONTENT_TYPE);<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">     </span>PrintWriter out=response.getWriter();<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">     </span>String action=request.getParameter("action");<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">     </span>if(("send").equals(action)){<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">        </span>StringBuffer sb=new StringBuffer("");<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">        </span>sb.append("&lt;type_name&gt;AA&lt;/type_name&gt;");<br /><span style="mso-spacerun: yes">        </span>sb.append("&lt;type_name&gt;BB&lt;/type_name&gt;");<br /><span style="mso-spacerun: yes">        </span>sb.append("&lt;type_name&gt;CC&lt;/type_name&gt;");<br /><span style="mso-spacerun: yes">        </span>sb.append("&lt;type_name&gt;DD&lt;/type_name&gt;");<br /><span style="mso-spacerun: yes">        </span>sb.append("&lt;/type&gt;");<br style="mso-special-character: line-break" /><br style="mso-special-character: line-break" /><o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">        </span>out.write(sb.toString());<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">        </span>out.close();<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">     </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes"> </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
				<span style="COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">二、</span>
				<span lang="EN-US" style="COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">html</span>
				<span style="COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">页面</span>
				<span lang="EN-US" style="COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">:</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;AJAX.html&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;script type="text/javascript"&gt;<br /><br />/*</span>
				<span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">通过异步传输</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">XMLHTTP</span>
				<span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">发送参数到</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">ajaxServlet</span>
				<span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">，返回符合条件的</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">XML</span>
				<span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">文档</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">*/<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">function getResult(){<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">  </span>var url = "/Test/ajaxServlet?action=send";<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">  </span>if (window.XMLHttpRequest) { <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">    </span>req = new XMLHttpRequest(); <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">  </span>}else if (window.ActiveXObject){ <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">    </span>req = new ActiveXObject("Microsoft.XMLHTTP"); <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">  </span>} <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">  </span>if(req){ <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">     </span>req.open("GET",url, true); <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">     </span>req.onreadystatechange = complete; <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">     </span>req.send(null); <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">  </span>} <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">} <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">/*</span>
				<span style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">分析返回的<span lang="EN-US">XML</span>文档<span lang="EN-US">*/<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">function complete(){<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">  </span>if (req.readyState == 4){ <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">     </span>if (req.status == 200) { <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">       </span>var type = req.responseXML.getElementsByTagName("type_name"); <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">       </span>var str=new Array();<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">       </span>for(var i=0;i&lt; type.length;i++){<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">         </span>str[i]=type[i].firstChild.data;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">         </span>document.all['td'].innerHTML+=str[i]+"<br />";<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">       </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes">   </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<span style="mso-spacerun: yes"> </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">&lt;/script&gt; <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">&lt;body onLoad="getResult()"&gt;<br />&lt;table width="80%" border="0" cellspacing="0" cellpadding="0"&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">&lt;tr&gt;&lt;td id="td"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">&lt;/table&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">&lt;/body&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">三、</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">web.xml</span>
				<span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">文件</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Tahoma; mso-font-kerning: 0pt">&lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee"<br />xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"<br />version="2.4"&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="mso-font-kerning: 0pt">&lt;servlet&gt;<br />&lt;servlet-name&gt;ajaxServlet&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;com.ajaxServlet&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;ajaxServlet&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/ajaxServlet&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />&lt;/web-app&gt;<br /></span>
				<span style="FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">四、运行图：</span>
				<span lang="EN-US">
						<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?>
						<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">
								<v:stroke joinstyle="miter">
								</v:stroke>
								<v:formulas>
										<v:f eqn="if lineDrawn pixelLineWidth 0">
										</v:f>
										<v:f eqn="sum @0 1 0">
										</v:f>
										<v:f eqn="sum 0 0 @1">
										</v:f>
										<v:f eqn="prod @2 1 2">
										</v:f>
										<v:f eqn="prod @3 21600 pixelWidth">
										</v:f>
										<v:f eqn="prod @3 21600 pixelHeight">
										</v:f>
										<v:f eqn="sum @0 0 1">
										</v:f>
										<v:f eqn="prod @6 1 2">
										</v:f>
										<v:f eqn="prod @7 21600 pixelWidth">
										</v:f>
										<v:f eqn="sum @8 21600 0">
										</v:f>
										<v:f eqn="prod @7 21600 pixelHeight">
										</v:f>
										<v:f eqn="sum @10 21600 0">
										</v:f>
								</v:formulas>
								<v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f">
								</v:path>
								<o:lock aspectratio="t" v:ext="edit">
								</o:lock>
						</v:shapetype>
						<v:shape id="_x0000_i1025" style="WIDTH: 333.75pt; HEIGHT: 182.25pt" alt="" type="#_x0000_t75">
								<v:imagedata o:href="http://www.java3z.com/cwbwebhome/article/article5/images/ajax.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif">
								</v:imagedata>
						</v:shape>
				</span>
		</p>
<img src ="http://www.cnitblog.com/eastperson/aggbug/19175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eastperson/" target="_blank">东人EP</a> 2006-11-15 09:52 <a href="http://www.cnitblog.com/eastperson/archive/2006/11/15/19175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>国内第一本Atlas图书！</title><link>http://www.cnitblog.com/eastperson/archive/2006/10/28/18534.html</link><dc:creator>东人EP</dc:creator><author>东人EP</author><pubDate>Sat, 28 Oct 2006 00:50:00 GMT</pubDate><guid>http://www.cnitblog.com/eastperson/archive/2006/10/28/18534.html</guid><wfw:comment>http://www.cnitblog.com/eastperson/comments/18534.html</wfw:comment><comments>http://www.cnitblog.com/eastperson/archive/2006/10/28/18534.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/eastperson/comments/commentRss/18534.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eastperson/services/trackbacks/18534.html</trackback:ping><description><![CDATA[
		<ul>
				<li>Foundations of Atlas <br />Atlas 基础教程 <br />ASP.NET Ajax快速开发<br />洞悉微软官方Ajax解决方案</li>
				<li>迅速使ASP.NET程序如虎添翼</li>
				<li>内容更新至Atlas最新版本</li>
				<li>人民邮电出版社</li>
				<li>【美】Laurence Moroney 著</li>
				<li>陈黎夫                              译</li>
		</ul>
<img src ="http://www.cnitblog.com/eastperson/aggbug/18534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eastperson/" target="_blank">东人EP</a> 2006-10-28 08:50 <a href="http://www.cnitblog.com/eastperson/archive/2006/10/28/18534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax无刷新实现图片切换特效</title><link>http://www.cnitblog.com/eastperson/archive/2006/10/10/17834.html</link><dc:creator>东人EP</dc:creator><author>东人EP</author><pubDate>Tue, 10 Oct 2006 13:49:00 GMT</pubDate><guid>http://www.cnitblog.com/eastperson/archive/2006/10/10/17834.html</guid><wfw:comment>http://www.cnitblog.com/eastperson/comments/17834.html</wfw:comment><comments>http://www.cnitblog.com/eastperson/archive/2006/10/10/17834.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/eastperson/comments/commentRss/17834.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eastperson/services/trackbacks/17834.html</trackback:ping><description><![CDATA[
		<p>Ajax无刷新实现图片切换特效 <br />Posted on 2006-09-19 17:04 wander 阅读(1005) 评论(11)  编辑 收藏 引用 收藏至365Key  <br />一、AjaxMethod<br />using System;<br />using System.Data;<br />using System.Data.SqlClient;</p>
		<p>namespace AjaxImage<br />{<br />    /**//// &lt;summary&gt;<br />    /// AjaxMethod 的摘要说明。<br />    /// &lt;/summary&gt;<br />    public class AjaxMethod<br />    {<br />        public AjaxMethod()<br />        {            <br />        }<br />        public static string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"].ToString();</p>
		<p>        GetDataSet#region GetDataSet<br />        public static DataSet GetDataSet(string sql)<br />        {<br />            SqlDataAdapter sda = new SqlDataAdapter(sql, ConnectionString);<br />            DataSet ds = new DataSet();<br />            sda.Fill(ds);<br />            if (ds != null)<br />                return ds;<br />            else<br />                return null;<br />        }<br />        #endregion</p>
		<p>        [AjaxPro.AjaxMethod]<br />        public static DataSet GetPhotoList( int iCategoryID )<br />        {<br />            string sql = "Select id,photo_path FROM Photo where photo_category_id=" + iCategoryID ;<br />            return GetDataSet( sql );<br />        }<br />        [AjaxPro.AjaxMethod]<br />        public static DataSet GetPhotoInfo( int id )<br />        {<br />            string sql = string.Format("SELECT photo_title, photo_description FROM Photo WHERE id = {0}", id);<br />            return GetDataSet( sql );<br />        }</p>
		<p>    }//end class<br />}</p>
		<p>二、页面HTML代码：<br />&lt;div id="Layer1" style="Z-INDEX:1; LEFT:104px; WIDTH:501px; POSITION:absolute; TOP:28px; HEIGHT:345px"&gt;<br />                &lt;img name="slideShow" src="images/space.gif" width="500" height="300" style="FILTER:revealTrans(duration=2,transition=23)"&gt;<br />            &lt;/div&gt;<br />            &lt;div id="Layer2" style="Z-INDEX:2; LEFT:490px; WIDTH:112px; POSITION:absolute; TOP:380px; HEIGHT:26px"&gt;<br />                &lt;img id="btnPlay" src="images/play_bw.gif" onclick="slideshow_automatic()" onmouseover="this.src='images/play.gif'"<br />                    onmouseout="this.src='images/play_bw.gif'"&gt; &lt;img id="btnPause" src="images/pause_bw.gif" onclick="pauseSlideShow()" onmouseover="this.src='images/pause.gif'"<br />                    onmouseout="this.src='images/pause_bw.gif'"&gt; &lt;img id="btnPrev" src="images/prev_bw.gif" onclick="previous_image()" onmouseover="this.src='images/prev.gif'"<br />                    onmouseout="this.src='images/prev_bw.gif'"&gt; &lt;img id="btnNext" src="images/next_bw.gif" onclick="next_image()" onmouseover="this.src='images/next.gif';next_image()"<br />                    onmouseout="this.src='images/next_bw.gif'"&gt;<br />            &lt;/div&gt;<br />三、JAVASCRIPT:<br />&lt;script language="javascript" type="text/javascript"&gt;<br />            // 定时器<br />            var timeDelay;<br />            <br />            // 图片自动浏览时的时间间隔<br />            var timeInterval = 4000;<br />            <br />            // Array对象,存储图片文件的路径<br />            var image;<br />            <br />            // 当前显示的图片序号<br />            var num;<br />            <br />            // 图片信息数据表<br />            var dt;<br />            // 预加载图片信息<br />            function PreloadImage(iCategoryID)<br />            {<br />                // 采用同步调用的方式获取图片的信息                <br />                var ds = AjaxImage.AjaxMethod.GetPhotoList(iCategoryID).value;<br />                <br />                // 如果返回了结果<br />                if (ds)<br />                {<br />                    // 判断数据表是否不为空<br />                    if (ds.Tables[0].Rows.length &gt; 0)<br />                    {<br />                        // 返回的图片信息数据表<br />                        dt = ds.Tables[0];<br />                        <br />                        // 用image对象存储图片的文件路径<br />                        image = new Array();<br />                        <br />                        // 图片在Photos目录下<br />                        for (var i = 0; i &lt; dt.Rows.length; i++)<br />                        {<br />                            image[i] = "Photos/" + dt.Rows[i].photo_path;<br />                        }<br />                                    <br />                        // imagePreload对象用于实现图片的预缓存<br />                        var imagePreload = new Array();<br />                        for (var i = 0;i &lt; image.length;i++)<br />                        {<br />                            // 通过新建Image对象,并将其src属性指向图片的URL<br />                            // 显现图片的预缓存<br />                            imagePreload[i] = new Image();<br />                            imagePreload[i].src = image[i];<br />                        }</p>
		<p>                        // 初始化一些变量<br />                        num = -1;<br />                        //nStatus = 0x09;<br />                        <br />                        // 加载第一张图片<br />                        next_image();                <br />                    }<br />                    else // 分类下没有图片<br />                    {<br />                        alert("该目录下没有图片！");<br />                    }<br />                }                <br />            }<br />            // 实现图片切换时的效果<br />            function image_effects()<br />            {<br />                // Transition的值为0~23之间的随机数,代表24种切换效果<br />                // 具体值与效果之间的对应见MSDN<br />                document.slideShow.filters.revealTrans.Transition = Math.random() * 23;<br />                <br />                // 应用并播放切换效果<br />                document.slideShow.filters.revealTrans.apply();<br />                document.slideShow.filters.revealTrans.play();<br />            }<br />            function next_image()<br />            {<br />                // 当前图片的序号向后移动,如果已经是最后一张,<br />                // 则切换到第一张图片<br />                num++;<br />                num %= image.length;<br />                <br />                // 图片的切换效果<br />                image_effects();<br />                <br />                // 将&lt;img&gt;对象的src属性设置为当前num对应的路径<br />                // 切换图片的显示<br />                document.slideShow.src = image[num];                <br />            }<br />            function previous_image()<br />            {<br />                // 当前图片的序号向后移动,如果已经是最后一张,<br />                // 则切换到第一张图片<br />                num += image.length - 1;<br />                num %= image.length;<br />                <br />                // 图片的切换效果<br />                image_effects();<br />                <br />                // 将&lt;img&gt;对象的src属性设置为当前num对应的路径<br />                // 切换图片的显示<br />                document.slideShow.src = image[num];                                <br />            <br />            }<br />            function slideshow_automatic()<br />            {<br />                // 当前图片的序号向后移动,如果已经是最后一张,<br />                // 则切换到第一张图片<br />                num ++;<br />                num %= image.length;<br />                <br />                // 图片的切换效果<br />                image_effects();<br />                <br />                // 将&lt;img&gt;对象的src属性设置为当前num对应的路径<br />                // 切换图片的显示<br />                document.slideShow.src = image[num];<br />                timeDelay = setTimeout( "slideshow_automatic()",timeInterval );                <br />            }<br />            // 停止自动播放<br />            function pauseSlideShow()<br />            {<br />                // 清除定时器,不再执行slideshow_automatic函数<br />                clearTimeout(timeDelay);<br />            }<br />        &lt;/script&gt;<br />四、在主页面的ONLOAD事件里面添加：</p>
		<p>      onload="PreloadImage('2')"</p>
		<p>五、WebConfig添加:<br />       &lt;system.web&gt;<br />       &lt;httpHandlers&gt;<br />            &lt;add verb="*" path="*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro" /&gt;<br />     &lt;/httpHandlers&gt;</p>
		<p>      &lt;configuration&gt;<br />       &lt;appSettings&gt;<br />           &lt;add key="ConnectionString" value="server=127.0.0.1;database=test;uid=sa;pwd=dfdf" /&gt; <br />       &lt;/appSettings&gt;    <br />六、数据库脚本:<br />       CREATE TABLE [Photo] (<br />    [id] [int] IDENTITY (1, 1) NOT NULL ,<br />    [photo_title] [varchar] (128) COLLATE Chinese_PRC_CI_AS NULL ,<br />    [photo_description] [text] COLLATE Chinese_PRC_CI_AS NULL ,<br />    [photo_category_id] [int] NULL ,<br />    [photo_path] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL <br />) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]<br />GO<br /></p>
<img src ="http://www.cnitblog.com/eastperson/aggbug/17834.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eastperson/" target="_blank">东人EP</a> 2006-10-10 21:49 <a href="http://www.cnitblog.com/eastperson/archive/2006/10/10/17834.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最近用Ajax，不知道在.net下，使用哪个框架好呢？</title><link>http://www.cnitblog.com/eastperson/archive/2006/09/22/17213.html</link><dc:creator>东人EP</dc:creator><author>东人EP</author><pubDate>Fri, 22 Sep 2006 14:09:00 GMT</pubDate><guid>http://www.cnitblog.com/eastperson/archive/2006/09/22/17213.html</guid><wfw:comment>http://www.cnitblog.com/eastperson/comments/17213.html</wfw:comment><comments>http://www.cnitblog.com/eastperson/archive/2006/09/22/17213.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/eastperson/comments/commentRss/17213.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eastperson/services/trackbacks/17213.html</trackback:ping><description><![CDATA[我现在主要用了，两个框架一个是Ajax.NET，一个是AjaxPro.NET，不知道这两个有啥不同的地方呢？<img src ="http://www.cnitblog.com/eastperson/aggbug/17213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eastperson/" target="_blank">东人EP</a> 2006-09-22 22:09 <a href="http://www.cnitblog.com/eastperson/archive/2006/09/22/17213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现漂亮的XP效果！</title><link>http://www.cnitblog.com/eastperson/archive/2006/08/30/16154.html</link><dc:creator>东人EP</dc:creator><author>东人EP</author><pubDate>Wed, 30 Aug 2006 04:51:00 GMT</pubDate><guid>http://www.cnitblog.com/eastperson/archive/2006/08/30/16154.html</guid><wfw:comment>http://www.cnitblog.com/eastperson/comments/16154.html</wfw:comment><comments>http://www.cnitblog.com/eastperson/archive/2006/08/30/16154.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnitblog.com/eastperson/comments/commentRss/16154.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eastperson/services/trackbacks/16154.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这是Html显示页面源码：&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;&lt;html&gt;&lt;head&gt;    &lt;title&gt;Image crop - DHTML user interface&lt;/title&gt;   ...&nbsp;&nbsp;<a href='http://www.cnitblog.com/eastperson/archive/2006/08/30/16154.html'>阅读全文</a><img src ="http://www.cnitblog.com/eastperson/aggbug/16154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eastperson/" target="_blank">东人EP</a> 2006-08-30 12:51 <a href="http://www.cnitblog.com/eastperson/archive/2006/08/30/16154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Struts应用中施展Ajax魔法</title><link>http://www.cnitblog.com/eastperson/archive/2006/06/07/11765.html</link><dc:creator>东人EP</dc:creator><author>东人EP</author><pubDate>Wed, 07 Jun 2006 05:52:00 GMT</pubDate><guid>http://www.cnitblog.com/eastperson/archive/2006/06/07/11765.html</guid><wfw:comment>http://www.cnitblog.com/eastperson/comments/11765.html</wfw:comment><comments>http://www.cnitblog.com/eastperson/archive/2006/06/07/11765.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/eastperson/comments/commentRss/11765.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eastperson/services/trackbacks/11765.html</trackback:ping><description><![CDATA[AJAX是“异步的JavaScript和XML”的缩写。这是一项技术，而不是一个如Struts一样的框架。为什么在AJAX周围会有这么多的关注呢?这是因为AJAX使web页面看起来并不像一个平面的文档，而更像用户所期望的如桌面应用的动态GUI应用程序。AJAX技术能在很多的浏览器上使用(包括IE和Netscape/Mozilla)。它已经为Microsoft(用于Outlook的web客户端)和Google(用户Google Maps和Gmail)所使用。
<p><font color="#000000">　　未使用AJAX之前</font></p><p><font color="#000000">　　目前大多数的Struts应用都是标准的“如同一个平面文档的web页面”的结构。如果你想模仿一些桌面应用程序(比如那些使用Java Swing，Visual Basic，或者Delphi建立的应用程序)，那么你有两个选择:你可以发送所有的可能作为页面的一部分被请求的信息，使用大量的JavaScript来操作其动态的显示(一个很慢并且非企业级Java的方法);或者你可以不改变形式地提交到后台服务器(一种有效的方法) 。AJAX提高给你了融合前面的最佳解决方案:动态的页面，但是大多数的应用是在你的web服务器的Java程序来处理的。</font></p><p><font color="#000000">　　AJAX 101</font></p><p><font color="#000000">　　AJAX和现有的动态HTML技术非常相似，并在其上增加了一个发送到“后台”服务器的请求来获取需要的新的或者更新的信息。AJAX的机制在其他地方已经有详细的说明――请查看本文后的Resources来获取更多。但是你至少需要知道:</font></p><ul><li><font color="#000000">　　1. XMLHttpRequest (如果你使用的是IE浏览器的话，则是Microsoft.XMLHTTP的ActiveX的对象)。这些对象，你可以在web页面中使用JavaScript调用。他们允许你作为后台的调用方式来请求web服务器的内容(例如，在表单提交后，屏幕并不像平时一样显示“空白”)。 </font></li><li><font color="#000000">　　2. XMLHttpRequest 和Microsoft.XMLHTTP 返回的内容可以作为XML或者文本来处理。JavaScript(在你页面上的)可以使用请求的新内容来更新页面。 </font></li><li><font color="#000000">　　3. 整个处理过程可以由普通的JavaScript事件来触发:onclick，onchange，onblur，等。</font></li></ul><p><font color="#000000">　　在你的Struts应用中使用AJAX</font></p><p><font color="#000000">　　你阅读了本文，然后你会对使用AJAX来创建动态的web页面感兴趣，并且想知道如何将它加入到你的Struts应用中。这只是选择之一。那么你会如何选择呢?</font></p><ul><li><font color="#000000">　　· 等待，知道Struts的下一个版本融合了AJAX技术。如果Struts开发者准备开发一个新的应用，这或许会是一个好的选择。再后面，可能会是要求JSF也这样做――对其本身并不一件坏事，但是对于已经存在的系统这将会带来最根本的改变。 </font></li><li><font color="#000000">　　· 你也可以直接采用新的方法，比如Direct Web Remoting (DWR) 和Ruby on Rails，这些都是专为建立AJAX应用的。如果你考虑不使用Struts来开发web的话，那么这些都是很又用的框架，并且值得一试。但是，这也同时意味着你必须要重写你的应用。 </font></li><li><font color="#000000">　　· 在你已经存在的Struts应用中增加AJAX。既然AJAX只是一项技术而并非框架，那么它就很容易融入到Struts中。作为现有的系统，其稳定性(如，保持现有的库文件)是相当重要的。所以这个方法被推荐，并且我们将在后面详细介绍。</font></li></ul><p><font color="#000000">　　我们选择在Struts应用中增加AJAX的优势是:</font></p><ul><li><font color="#000000">　　1. 它并不需要任何新的库文件或者服务器代码;只需要使用现有的Struts库文件和action。 </font></li><li><font color="#000000">　　2. 解决方案中所有部分――JavaScript，XML，Java和Struts――早已为广泛所知。 </font></li><li><font color="#000000">　　3. 此应用可以一块一块地移植到AJAX;我们可以确定哪些部分对用户有益，并首先将它们更新到动态AJAX显示。</font></li></ul><p><font color="#000000">　　实现方案</font></p><p><font color="#000000">　　我们如何真正的贯彻我们的选择呢?我们首先应该注意一个“标准的”(没有AJAX)Struts应用是如何工作的。在此应用中，一个一般的事件流程如下:</font></p><ul><li><font color="#000000">　　1. 使用点击超链接或者表单的提交按钮，用户发送请求。 </font></li><li><font color="#000000">　　2. web服务器运行处理请求的Struts Action来生成一个web页面。 </font></li><li><font color="#000000">　　3. 浏览器显示web页面。 </font></li><li><font color="#000000">　　4. 当用户点击保存的时候，信息由Struts框架中一个ActionForm类来转换并发送到服务器。 </font></li><li><font color="#000000">　　5. 然后，Struts框架调用Struts Action来出来请求(如，保存数据到数据库中)。 </font></li><li><font color="#000000">　　6. 页面再一次回传，处理流程继续。</font></li></ul><p><font color="#000000">　　现有的Struts应用</font></p><p><font color="#000000">　　一个演示事件流程的简单Struts应用可以在以下地址下载: </font><a href="http://sourceforge.net/project/showfiles.php?group_id=99476&amp;package_id=158438" target="_blank"><font color="#000000" size="2">struts-non-ajax.zip</font></a><font color="#000000">。此基于Struts的应用，是基于用户的输入显示或者隐藏蓝色和绿色的表格。图1显示了载入初始页面的画面。图2显示了用户输入值并点击了提交后的画面。虽然简单，但它已经足以表示一个Struts的工作流程。</font></p><p><font color="#000000"><img src="http://searchwebservices.techtarget.com.cn/imagelist/06/04/w5xpm4gf26fg.jpg" border="0" /></font></p><p><font color="#000000">　　图 1. 没有AJAX的例子:初始屏幕</font></p><p><font color="#000000"><img src="http://searchwebservices.techtarget.com.cn/imagelist/06/04/e1992717m03d.jpg" border="0" /></font></p><div><font color="#000000">　　图 2. 没有AJAX的例子:输入值并点击了提交</font></div><div><a class="f1"><font color="#000000"></font> </a></div><div class="guanggao"><span id="contentAdv"><font color="#000000"></font></span></div><p><font color="#000000"></font></p><p><font color="#000000">　　服务器端的代码是:一个Struts Action使用struts-config.xml 中定义的值转发到(相同的)JSP。这个例子代码中一些需要注意的地方是:</font></p><ul><li><font color="#000000">　　·struts-config.xml文件将所有的请求重定向到http://localhost:8080/struts-non-ajax/(或者和你自己的服务器相同)的index.jsp。 </font></li><li><font color="#000000">　　· index.jsp 包含了一个两个文本框的Struts form(showBlue和showGreen)。该页面同样包含了标签，但是如同两个文本框被初始化为空，标签之间的内容并不显示。 </font></li><li><font color="#000000">　　· 用户输入值(true或者false)并点击提交按钮，处理控制(经过Struts框架，读取struts-config.xml)提交到SampleAction类中。 </font></li><li><font color="#000000">　　·SampleAction记录下值，然后转发到index.jsp。一个成熟的Struts应用可能会处理更多的事情，不如保存或者查询数据库等。 </font></li><li><font color="#000000">　　· index.jsp 现在重新处理请求;如果ShowBlue或者ShowGreen的值是true，这些表格就显示出来。</font></li></ul><p><font color="#000000">　　该应用并没有任何“错误”。类似的Struts项目好多年都是这样做的。但是，我们如何在不添加复杂的JavaScript或者频繁的表单提交的前提下，为此应用增加动态的元素呢?</font></p><p><font color="#000000">　　我们的第一个Struts AJAX应用</font></p><p><font color="#000000">　　观察下下面的图3和图4。第一眼看上去，它们和前面的例子没有说明区别。它们的不同之处在于，页面载入后(图3)然后文本框中的值改变了，窗体自动提交而不显示空白的，然后在图4中显示结果。普通的提交按钮仍然在，你也可以选择使用它。</font></p><p><font color="#000000"><img src="http://searchwebservices.techtarget.com.cn/imagelist/06/04/6s0y6u481893.jpg" border="0" /></font></p><p><font color="#000000">　　图 3. 页面载入后的AJAX例子</font></p><p><font color="#000000"><img src="http://searchwebservices.techtarget.com.cn/imagelist/06/04/xc0k049x6hf0.jpg" border="0" /></font></p><p><font color="#000000">　　图 4. AJAX调用后的AJAX例子</font></p><p><font color="#000000">　　添加AJAX是出奇的容易。服务器端的代码和前面的例子是一样的: 一个Struts的ActionForm来后去数据，一个Struts的Action来执行需要的任务(例如，存储数据库)然后转发到适当的JSP页面来显示结果。</font></p><p><font color="#000000">　　继续</font></p><p><font color="#000000">　　如果你希望就此停止阅读(跳过这个例子的工作说明)，但是这里的是和你需要转换你的Struts应用到一个Struts-AJAX应用同样的风格:</font></p><ul><li><font color="#000000">　　1. 在你的web页面中引入一个Ajax.js (该文件是struts-ajax.zip 例文件中的一部分)。Ajax.js 包含了所有需要发送和接收AJAX调用的JavaScript方法。 </font></li><li><font color="#000000">　　2. 确保你希望在AJAX调用中更新的web页面的部分包含在标签中，并且给每个标签一个id。 </font></li><li><font color="#000000">　　3. 当一些事件触发的时候就更新页面(例如，文本框的the onchange()方法)，调用retrieveURL()方法，通过URL传递到需要执行服务器端处理的Struts Action。 </font></li><li><font color="#000000">　　4. 为了页面的显示/更新，最简单的方法是Struts Action转发回同样的页面。在本例中，showGreen/showBlue 文本框中的onchange()方法来触发AJAX调用。</font></li></ul><p><font color="#000000">　　JavaScript方法retrieveURL()调用服务器的Struts(通过URL)，获取JSP响应，然后更新显示页面中的 标签中的部分。就是这么简单!</font></p><p><font color="#000000">　　AJAX解决方案的细节</font></p><p><font color="#000000">　　我们将例子变为AJAX-Struts应用的时候，需要三个变化:</font></p><ul><li><font color="#000000">　　1. 增加一个JavaScript方法来完成到服务器的“背后的”AJAX调用。 </font></li><li><font color="#000000">　　2. 增加JavaScript代码来接收服务器的响应并更新页面。 </font></li><li><font color="#000000">　　3. 在JSP页面增加标签标签，这个标签中内容将在AJAX调用中更新。</font></li></ul><div><font color="#000000">　　我们将详细的说明上面的每一步。</font></div><div><font color="#000000">　发送AJAX请求到服务器</font></div><p><font color="#000000">　　有两个方法(在下面列出)用于发送请求到服务器。</font></p><p><font color="#000000">　　· retrieveURL()方法获得服务器的URL和Struts form。URL用于使用AJAX，form的值用于传递到服务器。</font></p><p><font color="#000000">　　· getFormAsString()方法用于将retrieveURL()中form命名的值组装成查询字符串，并发送到服务器。</font></p><p><font color="#000000">　　使用方法很简单，使用onclick()/onChange()事件来触发retrieveURL()更新显示。</font></p><p><font color="#000000">　　在这两个方法中有一些有趣的东西。</font></p><p><font color="#000000">　　在retrieveURL()方法中，req.onreadystatechange = processStateChange (注意，没有括号)这一行来告诉浏览器在服务器响应到达的时候调用processStateChange()方法(该方法将在后面介绍)。retrieveURL()方法中(现在已经是AJAX的标准了)同样决定是使用IE浏览器(ActiveX)还是使用Netscape/Mozilla (XmlHttpRequest) 来实现跨浏览器兼容。</font></p><p><font color="#000000">　　getFormAsString()方法将HTML form转换成字符串连接在URL后面(这样就允许我们发送HTTP GET请求)。这个字符串是经过转换的(比如，空格转换成%20等)，并且是一个Struts能将其组装成ActionForm的格式(并不需要Struts清楚的明白这个是来之AJAX的请求)。注意，在本例中我们使用HTTP GET，使用HTTP POST的方法也是类似的。</font></p><p><font color="#000000">function retrieveURL(url,nameOfFormToPost) {</font></p><p><font color="#000000">//将url转换成字符串<br />url=url+getFormAsString(nameOfFormToPost);</font></p><p><font color="#000000">//调用AJAX<br />if (window.XMLHttpRequest) { </font></p><p><font color="#000000">// 非IE浏览器<br />req = new XMLHttpRequest();<br />req.onreadystatechange = processStateChange;<br />try {<br />req.open("GET", url, true); <br />} catch (e) {<br />alert("Server Communication Problem\n"+e);<br />}<br />req.send(null);<br />} else if (window.ActiveXObject) {<br />// IE</font></p><p><font color="#000000">req = new ActiveXObject("Microsoft.XMLHTTP");<br />if (req) {<br />req.onreadystatechange=processStateChange;<br />req.open("GET", url, true);<br />req.send();<br />}<br />}<br />}</font></p><p><font color="#000000">getFormAsString() 是一个“私有” 方法，在retrieveURL()中使用。</font></p><p><font color="#000000">function getFormAsString(formName){</font></p><p><font color="#000000">//设置返回字符串<br />returnString ="";</font></p><p><font color="#000000">//取得表单的值<br />formElements=document.forms[formName].elements;</font></p><p><font color="#000000">//循环数组，组装url<br />//像'/strutsaction.do&amp;name=value'这样的格式</font></p><p><font color="#000000">for(var i=formElements.length-1;i&gt;=0; --i ){<br />//转化每一个值<br />returnString+="&amp;" <br />+escape(formElements[i].name)+"=" <br />+escape(formElements[i].value);<br />}</font></p><div><font color="#000000">//返回字符串<br />return returnString; <br />}</font></div><div><p><font color="#000000">　　根据AJAX的响应更新web页面</font></p><p><font color="#000000">　　到现在为止，我们学习过了使用JavaScript来完成AJAX调用(前面列出)，Struts Action，ActionForm以及JSP(基本没有变化，只是增加了标签)。为了完善我们对Struts-AJAX项目的了解，我们需要了解三个用于根据服务器返回的结果而更新页面的JavaScript方法。</font></p><ul><li><font color="#000000">　　· processStateChange(): 该方法在AJAX调用前设定。它在服务器响应到达后由XMLHttpRequest/Microsoft.XMLHTTP 对象调用。 </font></li><li><font color="#000000">　　·splitTextIntoSpan(): 根据响应，循环取出数组中的元素组装成NewContent。 </font></li><li><font color="#000000">　　·replaceExistingWithNewHtml(): 根据span元素数组，循环搜索，将里面的元素调换掉页面中和它的'someName'相同的中的内容。注意，我们使用的是req.responseText 方法来获得返回的内容(它允许我们操作任何文本的响应)。与此相对于的是req.responseXml (它的作用更大，但是要求服务器返回是XHTML或者XML)。</font></li></ul><p><font color="#000000">function processStateChange() {</font></p><p><font color="#000000">if (req.readyState == 4) { // 完成<br />if (req.status == 200) { // 响应正常</font></p><p><font color="#000000">//将响应的文本分割成Span元素<br />spanElements = <br />splitTextIntoSpan(req.responseText);</font></p><p><font color="#000000">//使用这些Span元素更新页面<br />replaceExistingWithNewHtml(spanElements);</font></p><p><font color="#000000">} else {<br />alert("Problem with server response:\n " <br />+ req.statusText);<br />}<br />}<br />}<br />replaceExistingWithNewHtml() 是为processStateChange()使用的“私有”方法。</font></p><p><font color="#000000">function replaceExistingWithNewHtml <br />(newTextElements){</font></p><p><font color="#000000">//循环newTextElements<br />for(var i=newTextElements.length-1;i&gt;=0;--i){</font></p><p><font color="#000000">//判断是否以 if(newTextElements[i]. <br />indexOf("-1){</font></p><p><font color="#000000">//获得span的名字- 设置在第一和第二个引号之间<br />//确认span元素是以下的格式<br />//NewContent<br />startNamePos=newTextElements[i]. <br />indexOf('"')+1;<br />endNamePos=newTextElements[i]. <br />indexOf('"',startNamePos);<br />name=newTextElements[i]. <br />substring(startNamePos,endNamePos);</font></p><p><font color="#000000">//获得内容－在第一个&gt;标记后的所有内容<br />startContentPos=newTextElements[i]. <br />indexOf('&gt;')+1; <br />content=newTextElements[i].<br />substring(startContentPos);</font></p><p><font color="#000000">//现在更新现有的Document中的元素， <br />// 确保文档存在该元素<br />if(document.getElementById(name)){<br />document.getElementById(name). <br />innerHTML = content;<br />}<br />}<br />}<br />splitTextIntoSpan() 是为processStateChange() 使用的“私有”方法。<br />function splitTextIntoSpan(textToSplit){</font></p><p><font color="#000000">//分割文档<br />returnElements=textToSplit. <br />split("")</font></p><p><font color="#000000">//处理每个元素 <br />for(var i=returnElements.length-1;i&gt;=0;--i){</font></p><p><font color="#000000">//删除掉第一个span后面的元素<br />spanPos = returnElements[i]. <br />indexOf(" </font></p><p><font color="#000000">//如果找到匹配的，获得span前的内容<br />if(spanPos&gt;0){<br />subString=returnElements[i].<br />substring(spanPos);<br />returnElements[i]=subString;<br />} <br />}<br />return returnElements;<br />}</font></p><p><font color="#000000">　　新的控制流</font></p><p><font color="#000000">　　添加以下的JavaScript代码到我们的应用中，以下的步骤将在服务器和浏览器中执行。</font></p><ul><li><font color="#000000">　　1. 如同一个普通Struts应用装载页面。 </font></li><li><font color="#000000">　　2. 用户改变文本框的值，触发一个onChange() 事件，调用retrieveURL() 方法。 </font></li><li><font color="#000000">　　3. 该JavaScript方法通过发送Struts明白的表单变量(后台)请求到服务器的Struts Action。 </font></li><li><font color="#000000">　　4. 该JavaScript方法同样设定了第二个JavaScript方法的名字，此方法将到服务器响应完毕后调用。本例子中，设定为processStateChange() 方法。 </font></li><li><font color="#000000">　　5. 如我们所预期的，服务器响应完毕，调用processStateChange() 方法。 </font></li><li><font color="#000000">　　6. JavaScript在(新的)服务器响应中循环取出所有元素。将页面上存在与获得元素名字相同的 中的元素替换掉。</font></li></ul><p><font color="#000000">　　在你的应用中设计AJAX</font></p><p><font color="#000000">　　以上描述的JavaScript方法能在大多数的应用中使用，包括比我们的例子复杂得多的。但是，在使用之前，你需要注意以下几点:</font></p><p><font color="#000000">　　· 避免复制代码，最好在初始化请求(如，显示完整的页面)和AJAX(更新部分页面)请求中使用相同的Struts Action和JSP。</font></p><p><font color="#000000">　　·在公共的Action(控制器)中，决定JSP页面(所有的JSP页面或者其中的一部分)中的一个区域需要传送到浏览器。通过在web服务器的session或者ActionForm中设定标记来让JSP页面知道哪些部分需要提交。</font></p><p><font color="#000000">　　· 在JSP中，使用Struts 或者JSTL标签来决定提交的HTML区域。</font></p><p><font color="#000000">　　使用AJAX的本例子，可以在以下下载: </font><a href="http://sourceforge.net/project/showfiles.php?group_id=99476&amp;package_id=158438" target="_blank"><font color="#000000" size="2">struts-Ajax.zip</font></a><a class="f1"></a></p><p><font color="#000000">　　结语</font></p><p><font color="#000000">　　AJAX技术允许我们在创建和使用web应用的时候完全的改变。本文介绍了一个简单的技术，在现有的Struts应用中增加Struts的处理。它允许我们利用我们已有的东西，不仅仅是代码，还包括了开发的技能。作为一个好的产品，它同样允许我们写出更清晰，更具移植性的Java Struts应用。</font></p><p><font color="#000000">版权声明：Techtarget获Matrix授权发布,如需转载请联系Matrix<br />作者:作者:Paul Browne;pawenwen(作者的blog:http://blog.matrix.org.cn/page/pawenwen)<br />译文:</font><a href="http://blog.matrix.org.cn/page/pawenwen?entry=%E5%9C%A8%E4%BD%A0%E7%9A%84struts%E5%BA%94%E7%94%A8%E4%B8%AD%E6%96%BD%E5%B1%95%E9%83%A8%E5%88%86ajax%E9%AD%94%E6%B3%95_%E7%BF%BB%E8%AF%91" target="_blank"><font color="#000000" size="2">点击</font></a><font face="Verdana"><a class="f1"></a></font></p></div><img src ="http://www.cnitblog.com/eastperson/aggbug/11765.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eastperson/" target="_blank">东人EP</a> 2006-06-07 13:52 <a href="http://www.cnitblog.com/eastperson/archive/2006/06/07/11765.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用AJAX与数据岛实现无刷新绑定</title><link>http://www.cnitblog.com/eastperson/archive/2006/06/07/11764.html</link><dc:creator>东人EP</dc:creator><author>东人EP</author><pubDate>Wed, 07 Jun 2006 05:48:00 GMT</pubDate><guid>http://www.cnitblog.com/eastperson/archive/2006/06/07/11764.html</guid><wfw:comment>http://www.cnitblog.com/eastperson/comments/11764.html</wfw:comment><comments>http://www.cnitblog.com/eastperson/archive/2006/06/07/11764.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/eastperson/comments/commentRss/11764.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eastperson/services/trackbacks/11764.html</trackback:ping><description><![CDATA[
		<span class="90V">
				<font size="3"> 
<p>首先我们今天要用到的是Ajax.NET Professional ，您可以从http://www.schwarz-interactive.de/ 获取关于AJAX.NET的相关信息。其次还需要知道XML数据岛的相关知识。</p><p>下面我们先来看一个简单的绑定例子：<br /><br />第一步先确定XML数据源<br /><br /></p><p><font face="新宋体"><code>＜xml ID="xmlData" name="xmlData"＞<br /><br />　＜root＞<br /><br />＜METADATA＞<br /><br />　＜AUTHOR＞John Smith＜/AUTHOR＞<br /><br />　＜GENERATOR＞Visual Notepad＜/GENERATOR＞<br /><br />　＜PAGETYPE＞Reference＜/PAGETYPE＞<br /><br />　＜ABSTRACT＞Specifies a data island＜/ABSTRACT＞<br /><br />＜/METADATA＞<br /><br />＜METADATA＞<br /><br />　＜AUTHOR＞John Smith2＜/AUTHOR＞<br /><br />　＜GENERATOR＞Visual Notepad2＜/GENERATOR＞<br /><br />　＜PAGETYPE＞Reference2＜/PAGETYPE＞<br /><br />　＜ABSTRACT＞Specifies a data island2＜/ABSTRACT＞<br /><br />＜/METADATA＞<br /><br />＜METADATA＞<br /><br />　＜AUTHOR＞John Smith3＜/AUTHOR＞<br /><br />　＜GENERATOR＞Visual Notepad3＜/GENERATOR＞<br /><br />　＜PAGETYPE＞Reference3＜/PAGETYPE＞<br /><br />　＜ABSTRACT＞Specifies a data island3＜/ABSTRACT＞<br /><br />＜/METADATA＞<br /><br />　＜/root＞<br /><br />＜/xml＞</code><br /><br /></font>第二步确定绑定容器，在这里我们使用Table<br /><br /><font face="新宋体"><code>＜TABLE dataSrc="#xmlData" border=1＞<br /><br />　＜TR＞<br /><br />＜TD＞＜span dataFld="AUTHOR"＞loading...＜/span＞＜/TD＞<br /><br />＜TD＞＜span dataFld="GENERATOR"＞loading...＜/span＞＜/TD＞<br /><br />＜TD＞＜span dataFld="PAGETYPE"＞loading...＜/span＞＜/TD＞<br /><br />＜TD＞＜span dataFld="ABSTRACT"＞loading...＜/span＞＜/TD＞<br /><br />　＜/TR＞<br /><br />＜/TABLE＞</code><br /><br /></font>把这两段代码Copy到您的HTMl页面运行既可看到效果。<br /><br />第一段是我们的XML数据源，也就是要绑定的数据，METADATA结点相当于表名， AUTHOR、GENERATOR、PAGETYPE、ABSTRACT相当于列名，下面的Table是用来显示数据的容器。＜TABLE dataSrc="#xmlData" border=1＞是指定Table的数据源，＜span dataFld="AUTHOR"＞loading...＜/span＞绑定字段名。 <br /><br />好了，知道这些之后就再来看如何结合Ajax实现无刷新绑定。<br /><br />第一步：配置Ajax，在Web.config文件中加入配置节： <br /><br /><font face="新宋体"><code>＜httpHandlers＞<br /><br />＜add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro"/＞<br /><br />＜/httpHandlers＞</code><br /><br /></font>第二步，编写返回数据集的代码： <br /><br /><code><font face="新宋体">public class MyClass<br /><br />{<br /><br />　[AjaxMethod]<br /><br />　public string GetDataSet()<br /><br />　{<br /><br />DataSet dst = new DataSet();<br /><br />DataTable dt = new DataTable();<br /><br />dt.Columns.Add("Text");<br /><br />dt.Columns.Add("Number");<br /><br />Random random = new Random(Guid.NewGuid().GetHashCode());<br /><br />for (int i = 0; i ＜ random.Next(10,20); i++)<br /><br />{<br /><br />　DataRow row = dt.NewRow();<br /><br />　row["Text"] = Guid.NewGuid().ToString("N");<br /><br />　row["Number"] = random.Next(100);<br /><br />　dt.Rows.Add(row);<br /><br />}<br /><br />dst.Tables.Add(dt);<br /><br />string text = "";<br /><br />using(MemoryStream ms = new MemoryStream())<br /><br />{<br /><br />　dst.WriteXml(ms);<br /><br />　ms.Position = 0;<br /><br />　StreamReader sr = new StreamReader(ms);<br /><br />　text = sr.ReadToEnd();<br /><br />}<br /><br />return text;<br /><br />　}<br /><br />}</font></code></p><p><br /><br />第三步：在Page_Load中注册该方法，AjaxPro.Utility.RegisterTypeForAjax(typeof(WebTest1.AjaxTest1));（WebTest1是名称空间的名字）</p><p>第四步：添加客户端绑定</p><p><code><p>＜INPUT onclick="WebTest1.MyClass.GetDataSet(callback)" type="button" value="GetDataSet"＞<br /><br />＜div id="oDataPanel"＞<br /><br />＜/div＞<br /><br />＜TABLE datasrc="#xmlData" WIDTH="500" BORDER="1" </p><p>CELLSPACING="1" CELLPADDING="1"＞<br /><br />　＜thead＞<br /><br />＜tr＞<br /><br />　＜th width="70%"＞姓名＜/th＞<br /><br />　＜th width="30%"＞年龄＜/th＞<br /><br />＜/tr＞<br /><br />　＜/thead＞<br /><br />　＜TR＞<br /><br />＜TD＞＜span datafld="Text"＞＜/span＞＜/TD＞<br /><br />＜TD＞＜span datafld="Number"＞＜/span＞＜/TD＞<br /><br />　＜/TR＞<br /><br />＜/TABLE＞</p><p>＜div id="oDataPanel"＞是准备用来存放Xml数据源的容器</p></code><br /><br /><font face="宋体, MS Song">第五步：编定加载数据的JavaScript代码<br /><br /><code>function callback(res)<br /><br />{<br /><br />if(!res.error)<br /><br />{<br /><br />document.all.oDataPanel.innerHTML = '＜xml id="xmlData"＞'+ res.value +'＜/xml＞';<br /><br />}<br /><br />else<br /><br />{<br /><br />alert(res.error.Message);<br /><br />}<br /><br />}</code><font face="宋体, MS Song"></font></font></p></font>
		</span>
<img src ="http://www.cnitblog.com/eastperson/aggbug/11764.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eastperson/" target="_blank">东人EP</a> 2006-06-07 13:48 <a href="http://www.cnitblog.com/eastperson/archive/2006/06/07/11764.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax 之经典应用</title><link>http://www.cnitblog.com/eastperson/archive/2006/06/07/11758.html</link><dc:creator>东人EP</dc:creator><author>东人EP</author><pubDate>Wed, 07 Jun 2006 04:59:00 GMT</pubDate><guid>http://www.cnitblog.com/eastperson/archive/2006/06/07/11758.html</guid><wfw:comment>http://www.cnitblog.com/eastperson/comments/11758.html</wfw:comment><comments>http://www.cnitblog.com/eastperson/archive/2006/06/07/11758.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/eastperson/comments/commentRss/11758.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eastperson/services/trackbacks/11758.html</trackback:ping><description><![CDATA[一，国内网站
<div>    1.163--------------------<a href="http://mail.163.com/"><font color="#000000">http://mail.163.com</font></a><font color="#000000"></font><a href="http://www.126.com/"><font color="#000000">http://www.126.com</font></a><br /><font color="#000000">    2.新浪--------------------</font><a href="http://tech.sina.com.cn/mobile/volume/all.html" target="_blank"><font color="#000000">新浪手机</font></a><font color="#000000">- </font><a href="http://comment4.news.sina.com.cn/comment/skin/default.html?channel=gn&amp;newsid=1-1-9802858&amp;style=0" target="_blank"><font color="#000000">新浪评论</font></a></div><div><br />二，国外网站<br /></div><ol><li><div><a href="http://www.ajaxmatters.com/r/go?id=70" target="_blank"><font color="#000000">24SevenOffice</font></a><font color="#000000"></font></div></li><li><a href="http://www.ajaxmatters.com/r/go?id=533" target="_blank"><font color="#000000">64pola.pl: AJAX Multiplayer Chess Server</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=226" target="_blank"><font color="#000000">A9 Maps</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=59" target="_blank"><font color="#000000">A9.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=589" target="_blank"><font color="#000000">AgileGallery.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=283" target="_blank"><font color="#000000">AJAX Dictionary</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=406" target="_blank"><font color="#000000">AJAX Translator</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=521" target="_blank"><font color="#000000">ajaxWrite</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=265" target="_blank"><font color="#000000">Apple Store</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=496" target="_blank"><font color="#000000">Ask.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=511" target="_blank"><font color="#000000">Ask.com Maps</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=515" target="_blank"><font color="#000000">AskAlexia.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=60" target="_blank"><font color="#000000">Backbase</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=418" target="_blank"><font color="#000000">BaeBo</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=61" target="_blank"><font color="#000000">BaseCamp</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=58" target="_blank"><font color="#000000">BetFair.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=216" target="_blank"><font color="#000000">BlinkList</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=348" target="_blank"><font color="#000000">BloxPress.org</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=523" target="_blank"><font color="#000000">Box.net</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=421" target="_blank"><font color="#000000">BubbleShare.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=67" target="_blank"><font color="#000000">Colr.org</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=397" target="_blank"><font color="#000000">CommonTimes.org</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=350" target="_blank"><font color="#000000">Convea.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=488" target="_blank"><font color="#000000">Diggilicious.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=566" target="_blank"><font color="#000000">DutchPIPE.org</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=507" target="_blank"><font color="#000000">Edgeio.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=540" target="_blank"><font color="#000000">Eyespot.com: Editing video in your browser</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=71" target="_blank"><font color="#000000">Flickr.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=62" target="_blank"><font color="#000000">Form Assembly</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=302" target="_blank"><font color="#000000">Gap.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=69" target="_blank"><font color="#000000">Gmail</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=547" target="_blank"><font color="#000000">Google Calendar</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=63" target="_blank"><font color="#000000">Google Groups</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=65" target="_blank"><font color="#000000">Google Maps</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=208" target="_blank"><font color="#000000">Google Personalized Home</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=313" target="_blank"><font color="#000000">Google Reader</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=64" target="_blank"><font color="#000000">Google Suggest</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=535" target="_blank"><font color="#000000">GotAPI.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=202" target="_blank"><font color="#000000">GPlotter</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=528" target="_blank"><font color="#000000">Hive7.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=592" target="_blank"><font color="#000000">InstantDomainSearch.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=318" target="_blank"><font color="#000000">Jacuba.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=519" target="_blank"><font color="#000000">Jobby</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=87" target="_blank"><font color="#000000">Kayak.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=520" target="_blank"><font color="#000000">Kiko</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=322" target="_blank"><font color="#000000">KillSwitchCollective.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=68" target="_blank"><font color="#000000">Linkaroo</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=275" target="_blank"><font color="#000000">Meebo</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=192" target="_blank"><font color="#000000">MSN Virtual Earth</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=57" target="_blank"><font color="#000000">NearBinder.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=266" target="_blank"><font color="#000000">Netvibes.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=74" target="_blank"><font color="#000000">ObjectGraph Dictionary</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=72" target="_blank"><font color="#000000">Orkut.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=567" target="_blank"><font color="#000000">Panic Goods Apparel</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=296" target="_blank"><font color="#000000">Protopage</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=66" target="_blank"><font color="#000000">Ripped Tickets</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=291" target="_blank"><font color="#000000">SimplyHired.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=508" target="_blank"><font color="#000000">SoloModels.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=607" target="_blank"><font color="#000000">Spotback.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=73" target="_blank"><font color="#000000">Sproutliner</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=214" target="_blank"><font color="#000000">Start.com beta</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=75" target="_blank"><font color="#000000">Ta-daLists</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=387" target="_blank"><font color="#000000">TagWorld</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=568" target="_blank"><font color="#000000">TeamSlide.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=516" target="_blank"><font color="#000000">TicketSavvy.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=255" target="_blank"><font color="#000000">Top 10 Ajax Applications</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=308" target="_blank"><font color="#000000">Top 10 Ajax Applications (Part 2)</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=86" target="_blank"><font color="#000000">Webezz.net</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=600" target="_blank"><font color="#000000">WikiUpload.com</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=261" target="_blank"><font color="#000000">Yahoo! Instant Search</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=601" target="_blank"><font color="#000000">Yahoo! Tech</font></a><font color="#000000"></font></li><li><a href="http://www.ajaxmatters.com/r/go?id=473" target="_blank"><font color="#000000">Zillow.com</font></a><font color="#000000"></font></li></ol><img src ="http://www.cnitblog.com/eastperson/aggbug/11758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eastperson/" target="_blank">东人EP</a> 2006-06-07 12:59 <a href="http://www.cnitblog.com/eastperson/archive/2006/06/07/11758.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax技术简介</title><link>http://www.cnitblog.com/eastperson/archive/2006/06/07/11757.html</link><dc:creator>东人EP</dc:creator><author>东人EP</author><pubDate>Wed, 07 Jun 2006 04:56:00 GMT</pubDate><guid>http://www.cnitblog.com/eastperson/archive/2006/06/07/11757.html</guid><wfw:comment>http://www.cnitblog.com/eastperson/comments/11757.html</wfw:comment><comments>http://www.cnitblog.com/eastperson/archive/2006/06/07/11757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/eastperson/comments/commentRss/11757.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eastperson/services/trackbacks/11757.html</trackback:ping><description><![CDATA[
		<p>作为J2EE开发人员，我们似乎经常关注“后端机制（backend mechanics）”。我们通常会忘记，J2EE的主要成功之处在Web应用程序方面；许多原因使得人们喜欢利用Web开发应用程序，但主要还是因为其易于部署的特点允许站点以尽可能低的成本拥有上百万的用户。遗憾的是，在过去几年中，我们在后端投入了太多的时间，而在使我们的Web用户界面对用户自然和响应灵敏方面却投入不足。</p>
		<p>本文介绍一种方法，Ajax，使用它可以构建更为动态和响应更灵敏的Web应用程序。该方法的关键在于对浏览器端的JavaScript、DHTML和与服务器异步通信的组合。本文也演示了启用这种方法是多么简单：利用一个Ajax框架（指DWR）构造一个应用程序，它直接从浏览器与后端服务进行通信。如果使用得当，这种强大的力量可以使应用程序更加自然和响应灵敏，从而提升用户的浏览体验。</p>
		<p>该应用程序中所使用的示例代码已打包为单独的WAR文件，可供下载。</p>
		<p>
				<strong>简介</strong>
		</p>
		<p>术语Ajax用来描述一组技术，它使浏览器可以为用户提供更为自然的浏览体验。在Ajax之前，Web站点强制用户进入提交/等待/重新显示范例，用户的动作总是与服务器的“思考时间”同步。Ajax提供与服务器异步通信的能力，从而使用户从请求/响应的循环中解脱出来。借助于Ajax，可以在用户单击按钮时，使用JavaScript和DHTML立即更新UI，并向服务器发出异步请求，以执行更新或查询数据库。当请求返回时，就可以使用JavaScript和CSS来相应地更新UI，而不是刷新整个页面。最重要的是，用户甚至不知道浏览器正在与服务器通信：Web站点看起来是即时响应的。</p>
		<p>虽然Ajax所需的基础架构已经出现了一段时间，但直到最近异步请求的真正威力才得到利用。能够拥有一个响应极其灵敏的Web站点确实激动人心，因为它最终允许开发人员和设计人员使用标准的HTML/CSS/JavaScript堆栈创建“桌面风格的（desktop-like）”可用性。</p>
		<p>通常，在J2EE中，开发人员过于关注服务和持久性层的开发，以至于用户界面的可用性已经落后。在一个典型的J2EE开发周期中，常常会听到这样的话，“我们没有可投入UI的时间”或“不能用HTML实现”。但是，以下Web站点证明，这些理由再也站不住脚了：</p>
		<ul>
				<li>
						<a href="http://backpackit.com/" target="_blank">
								<font color="#0000ff">BackPack</font>
						</a>
				</li>
				<li>
						<a href="http://www.google.com/webhp?complete=1&amp;hl=en" target="_blank">
								<font color="#0000ff">Google Suggest</font>
						</a>
				</li>
				<li>
						<a href="http://maps.google.com/" target="_blank">
								<font color="#0000ff">Google Maps</font>
						</a>
				</li>
				<li>
						<a href="http://www.palmsphere.com/" target="_blank">
								<font color="#0000ff">PalmSphere</font>
						</a>
				</li>
		</ul>
		<p>所有这些Web站点都告诉我们，Web应用程序不必完全依赖于从服务器重新载入页面来向用户呈现更改。一切似乎就在瞬间发生。简而言之，在涉及到用户界面的响应灵敏度时，基准设得更高了。</p>
		<p>
				<strong>定义Ajax</strong>
		</p>
		<p>Adaptive Path公司的Jesse James Garrett这样定义Ajax：</p>
		<p>Ajax不是一种技术。实际上，它由几种蓬勃发展的技术以新的强大方式组合而成。Ajax包含：</p>
		<ul>
				<li>基于CSS标准的表示； 
</li>
				<li>使用Document Object Model进行动态显示和交互； 
</li>
				<li>使用XMLHttpRequest与服务器进行异步通信； 
</li>
				<li>使用JavaScript绑定一切。 </li>
		</ul>
		<p>这非常好，但为什么要以Ajax命名呢？其实术语Ajax是由Jesse James Garrett创造的，他说它是“Asynchronous JavaScript + XML的简写”。<br /></p>
		<p>
				<span class="90V">
						<font size="3">
								<span class="top11">
										<strong>Ajax的工作原理</strong>
								</span>
						</font>
				</span>
		</p>
		<p>
		</p>
		<p>Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入，它是一种支持异步请求的技术。简而言之，XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应，而不阻塞用户。</p>
		<p>在创建Web站点时，在客户端执行屏幕更新为用户提供了很大的灵活性。下面是使用Ajax可以完成的功能：</p>
		<ul>
				<li>动态更新购物车的物品总数，无需用户单击Update并等待服务器重新发送整个页面。 
</li>
				<li>提升站点的性能，这是通过减少从服务器下载的数据量而实现的。例如，在Amazon的购物车页面，当更新篮子中的一项物品的数量时，会重新载入整个页面，这必须下载32K的数据。如果使用Ajax计算新的总量，服务器只会返回新的总量值，因此所需的带宽仅为原来的百分之一。 
</li>
				<li>消除了每次用户输入时的页面刷新。例如，在Ajax中，如果用户在分页列表上单击Next，则服务器数据只刷新列表而不是整个页面。 
</li>
				<li>直接编辑表格数据，而不是要求用户导航到新的页面来编辑数据。对于Ajax，当用户单击Edit时，可以将静态表格刷新为内容可编辑的表格。用户单击Done之后，就可以发出一个Ajax请求来更新服务器，并刷新表格，使其包含静态、只读的数据。 </li>
		</ul>
		<p>一切皆有可能！但愿它能够激发您开始开发自己的基于Ajax的站点。然而，在开始之前，让我们介绍一个现有的Web站点，它遵循传统的提交/等待/重新显示的范例，我们还将讨论Ajax如何提升用户体验。</p>
		<p>
				<strong>Ajax可用于那些场景？——一个例子：MSN Money页面</strong>
		</p>
		<p>前几天，在浏览MSN Money页面的时候，有一篇关于房地产投资的文章引起了我的好奇心。我决定使用站点的“Rate this article”（评价本文）功能，鼓励其他的用户花一点时间来阅读这篇文章。在我单击vote按钮并等待了一会儿之后，整个页面被刷新，在原来投票问题所在的地方出现了一个漂亮的感谢画面。</p>
		<p>
				<img height="63" src="http://www.51cto.com/files/uploadimg/20051117/1356090.jpg" width="303" />
		</p>
		<p>而Ajax能够使用户的体验更加愉快，它可以提供响应更加灵敏的UI，并消除页面刷新所带来的闪烁。目前，由于要刷新整个页面，需要传送大量的数据，因为必须重新发送整个页面。如果使用Ajax，服务器可以返回一个包含了感谢信息的500字节的消息，而不是发送26,813字节的消息来刷新整个页面。即使使用的是高速Internet，传送26K和1/2K的差别也非常大。同样重要的是，只需要刷新与投票相关的一小节，而不是刷新整个屏幕。</p>
		<p>让我们利用Ajax实现自己的基本投票系统。</p>
		<p>
				<strong>原始的Ajax：直接使用XmlHttpRequest</strong>
		</p>
		<p>如上所述，Ajax的核心是JavaScript对象XmlHttpRequest。下面的示例文章评价系统将带您熟悉Ajax的底层基本知识：<a href="http://tearesolutions.com/ajax-demo/raw-ajax.html" target="_blank"><font color="#0000ff">http://tearesolutions.com/ajax-demo/raw-ajax.html</font></a>。注：如果您已经在本地WebLogic容器中安装了<a href="http://dev2dev.bea.com/2005/08/ajax-demo.war"><font color="#0000ff">ajax-demo.war</font></a>，可以导航到<a href="http://localhost:7001/ajax-demo/raw-ajax.html" target="_blank"><font color="#0000ff">http://localhost:7001/ajax-demo/raw-ajax.html</font></a>，</p>
		<p>浏览应用程序，参与投票，并亲眼看它如何运转。熟悉了该应用程序之后，继续阅读，进一步了解其工作原理细节。</p>
		<p>首先，您拥有一些简单的定位点标记，它连接到一个JavaScriptcastVote(rank)函数。 </p>
		<pre class="code">function castVote(rank) {
  var url = "/ajax-demo/static-article-ranking.html";
  var callback = processAjaxResponse;
  executeXhr(callback, url);
}
</pre>
		<p>该函数为您想要与之通信的服务器资源创建一个URL并调用内部函数executeXhr，提供一个回调JavaScript函数，一旦服务器响应可用，该函数就被执行。由于我希望它运行在一个简单的Apache环境中，“cast vote URL”只是一个简单的HTML页面。在实际情况中，被调用的URL将记录票数并动态地呈现包含投票总数的响应。</p>
		<p>下一步是发出一个XmlHttpRequest请求： </p>
		<pre class="code">function executeXhr(callback, url) {
  // branch for native XMLHttpRequest object
  if (window.XMLHttpRequest) {
    req = new XMLHttpRequest();
    req.onreadystatechange = callback;
    req.open("GET", url, true);
    req.send(null);
  } // branch for IE/Windows ActiveX version
  else if (window.ActiveXObject) {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    if (req) {
      req.onreadystatechange = callback;
      req.open("GET", url, true);
      req.send();
    }
  }
}</pre>
		<p>如您所见，执行一个XmlHttpRequest并不简单，但非常直观。和平常一样，在JavaScript领域，大部分的工作量都花在确保浏览器兼容方面。在这种情况下，首先要确定XmlHttpRequest是否可用。如果不能用，很可能要使用Internet Explorer，这样就要使用所提供的ActiveX实现。</p>
		<p>executeXhr()方法中最关键的部分是这两行： </p>
		<pre class="code">req.onreadystatechange = callback;
req.open("GET", url, true);
</pre>
		<p>第一行定义了JavaScript回调函数，您希望一旦响应就绪它就自动执行，而req.open()方法中所指定的“true”标志说明您想要异步执行该请求。<br /></p>
		<p>
				<span class="90V">
						<font size="3">
								<span class="top11">一旦服务器处理完XmlHttpRequest并返回给浏览器，使用req.onreadystatechange指派所设置的回调方法将被自动调用。 </span>
						</font>
				</span>
		</p>
		<pre class="code">function processAjaxResponse() {
  // only if req shows "loaded"
  if (req.readyState == 4) {
    // only if "OK"
    if (req.status == 200) {
      502 502'votes').innerHTML = req.responseText;
    } else {
      alert("There was a problem retrieving the XML data:
" +
      req.statusText);
    }
  }
} 
</pre>
		<p>该代码相当简洁，并且使用了几个幻数，这使得难以一下子看出发生了什么。为了弄清楚这一点，下面的表格（引用自<a href="http://developer.apple.com/internet/webcontent/xmlhttpreq.html" target="_blank"><font color="#0000ff">http://developer.apple.com/internet/webcontent/xmlhttpreq.html</font></a>）列举了常用的XmlHttpRequest对象属性。</p>
		<p>
		</p>
		<table cellspacing="1" cellpadding="0" width="80%" bgcolor="#cccccc" border="0">
				<tbody>
						<tr bgcolor="#ffffff">
								<td height="22">
										<p>
												<strong>属性</strong>
										</p>
								</td>
								<td>
										<p>
												<strong>描述</strong>
										</p>
								</td>
						</tr>
						<tr bgcolor="#ffffff">
								<td valign="top" height="22">
										<p>onreadystatechange</p>
								</td>
								<td valign="top">
										<p>每次状态改变所触发事件的事件处理程序</p>
								</td>
						</tr>
						<tr bgcolor="#ffffff">
								<td valign="top" height="22">
										<p>readyState</p>
								</td>
								<td valign="top">
										<p>对象状态值： 
</p>
										<ul>
												<li>0 = 未初始化（uninitialized） 
</li>
												<li>1 = 正在加载（loading） 
</li>
												<li>2 = 加载完毕（loaded） 
</li>
												<li>3 = 交互（interactive） 
</li>
												<li>4 = 完成（complete） </li>
										</ul>
								</td>
						</tr>
						<tr bgcolor="#ffffff">
								<td valign="top" height="22">
										<p>responseText</p>
								</td>
								<td valign="top">
										<p>从服务器进程返回的数据的字符串形式</p>
								</td>
						</tr>
						<tr bgcolor="#ffffff">
								<td valign="top" height="22">
										<p>responseXML</p>
								</td>
								<td valign="top">
										<p>从服务器进程返回的DOM兼容的文档数据对象</p>
								</td>
						</tr>
						<tr bgcolor="#ffffff">
								<td valign="top" height="22">
										<p>status</p>
								</td>
								<td valign="top">
										<p>从服务器返回的数字代码，比如404（未找到）或200（就绪）</p>
								</td>
						</tr>
						<tr bgcolor="#ffffff">
								<td valign="top" height="22">
										<p>statusText</p>
								</td>
								<td valign="top">
										<p>伴随状态码的字符串信息</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p>现在processVoteResponse()函数开始显示出其意义了。它首先检查XmlHttpRequest的整体状态以保证它已经完成（readyStatus == 4），然后根据服务器的设定询问请求状态。如果一切正常（status == 200）,就使用innerHTML属性重写DOM的“votes”节点的内容。</p>
		<p>既然您亲眼看到了XmlHttpRequest对象是如何工作的，就让我们利用一个旨在简化JavaScript与Java应用程序之间的异步通信的框架来对具体的细节进行抽象。</p>
		<p>
				<strong>Ajax: DWR方式</strong>
		</p>
		<p>按照与文章评价系统相同的流程，我们将使用Direct Web Remoting（DWR）框架实现同样的功能。</p>
		<p>假定文章和投票结果存储在一个数据库中，使用某种对象/关系映射技术来完成抽取工作。为了部署起来尽可能地简单，我们不会使用数据库进行持久性存储。此外，为使应用程序尽可能通用，也不使用Web框架。相反，应用程序将从一个静态HTML文件开始，可以认为它由服务器动态地呈现。除了这些简化措施，应用程序还应该使用Spring Framework关联一切，以便轻松看出如何在一个“真实的”应用程序中使用DWR。</p>
		<p>现在应该下载示例应用程序并熟悉它。该应用程序被压缩为标准的WAR文件，因此您可以把它放置到任何一个Web容器中——无需进行配置。部署完毕之后，就可以导航到<a href="http://localhost:7001/ajax_demo/dwr-ajax.html" target="_blank"><font color="#0000ff">http://localhost:7001/ajax_demo/dwr-ajax.html</font></a>来运行程序。</p>
		<p>可以查看HTML源代码，了解它如何工作。给人印象最深的是，代码如此简单——所有与服务器的交互都隐藏在JavaScript对象ajaxSampleSvc的后面。更加令人惊讶的是，ajaxSampleSvc服务不是由手工编写而是完全自动生成的！让我们继续，看看这是如何做到的。</p>
		<p>
				<strong>引入DWR</strong>
		</p>
		<p>如同在“原始的Ajax”一节所演示的那样，直接使用XmlHttpRequest创建异步请求非常麻烦。不仅JavaScript代码冗长，而且必须考虑服务器端为定位Ajax请求到适当的服务所需做的工作，并将结果封送到浏览器。</p>
		<p>设计DWR的目的是要处理将Web页面安装到后端服务上所需的所有信息管道。它是一个Java框架，可以很轻松地将它插入到Web应用程序中，以便JavaScript代码可以调用服务器上的服务。它甚至直接与Spring Framework集成，从而允许用户直接向Web客户机公开bean。</p>
		<p>DWR真正的巧妙之处是，在用户配置了要向客户机公开的服务之后，它使用反射来生成JavaScript对象，以便Web页面能够使用这些对象来访问该服务。然后Web页面只需接合到生成的JavaScript对象，就像它们是直接使用服务一样；DWR无缝地处理所有有关Ajax和请求定位的琐碎细节。</p>
		<p>让我们仔细分析一下示例代码，弄清它是如何工作的。<br /></p>
		<p>
				<span class="90V">
						<font size="3">
								<span class="top11">
										<strong>应用程序细节：DWR分析</strong>
								</span>
						</font>
				</span>
		</p>
		<p>
		</p>
		<p>关于应用程序，首先要注意的是，它是一个标准的Java应用程序，使用分层架构（Layered Architecture）设计模式。使用DWR通过JavaScript公开一些服务并不影响您的设计。 </p>
		<p>
				<img height="344" src="http://www.51cto.com/files/uploadimg/20051117/1356091.jpg" width="209" />
		</p>
		<p>下面是一个简单的Java服务，我们将使用DWR框架直接将其向JavaScript代码公开：</p>
		<pre class="code">package com.tearesolutions.service;

public interface AjaxSampleSvc { 
  Article castVote(int rank);
}
</pre>
		<p>这是一个被简化到几乎不可能的程度的例子，其中只有一篇文章可以投票。该服务由Spring管理，它使用的bean名是ajaxSampleSvc，它的持久性需求则依赖于ArticleDao。详情请参见applicationContext.xml。</p>
		<p>为了把该服务公开为JavaScript对象，需要配置DWR，添加dwr.xml文件到WEB-INF目录下： </p>
		<pre class="code">
				<pre class="code">
						<dwr>
								<allow>
										<create creator="spring" javascript="ajaxSampleSvc">
												<param name="beanName" value="ajaxSampleSvc" />
										</create>
										<convert converter="bean" match="com.tearesolutions.model.Article" />
										<exclude method="toString" />
										<exclude method="setArticleDao" />
								</allow>
						</dwr>
				</pre>
				<p>dwr.xml文件告诉DWR哪些服务是要直接向JavaScript代码公开的。注意，已经要求公开Spring bean ajaxSampleSvc。DWR将自动找到由应用程序设置的SpringApplicationContext。为此，必须使用标准的servlet过滤器ContextLoaderListener来初始化Spring ApplicationContext。</p>
				<p>DWR被设置为一个servlet，所以把它的定义添加到web.xml： </p>
				<pre class="code">
						<pre class="code">
								<web-app>
										<display-name>Ajax Examples</display-name>
										<listener>
												<listener-class>
      org.springframework.web.context.ContextLoaderListener
  </listener-class>
										</listener>
										<servlet>
												<servlet-name>ajax_sample</servlet-name>
												<servlet-class>com.tearesolutions.web.AjaxSampleServlet</servlet-class>
												<load-on-startup>1</load-on-startup>
										</servlet>
										<servlet>
												<servlet-name>dwr-invoker</servlet-name>
												<display-name>DWR Servlet</display-name>
												<description>Direct Web Remoter Servlet</description>
												<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
												<init-param>
														<param-name>debug</param-name>
														<param-value>true</param-value>
												</init-param>
										</servlet>
										<servlet-mapping>
												<servlet-name>ajax_sample</servlet-name>
												<url-pattern>/ajax_sample</url-pattern>
										</servlet-mapping>
										<servlet-mapping>
												<servlet-name>dwr-invoker</servlet-name>
												<url-pattern>/dwr/*</url-pattern>
												<p>
														<span class="90V">
																<font size="3">
																		<span class="top11">做完这些之后，可以加载<a href="http://localhost:7001/ajax-demo/dwr" target="_blank"><font color="#0000ff">http://localhost:7001/ajax-demo/dwr</font></a>，看看哪些服务可用。结果如下： <p></p><p><img height="102" src="http://www.51cto.com/files/uploadimg/20051117/1356092.jpg" width="305" /></p><p>图3. 可用的服务</p>单击ajaxSampleSvc链接，查看有关如何在HTML页面内直接使用服务的示例实现。其中包含的两个JavaScript文件完成了大部分的功能： <pre class="code"><script src="/ajax-demo/dwr/interface/ajaxSampleSvc.js" type="text/javascript"></script><script src="/ajax-demo/dwr/engine.js" type="text/javascript"></script></pre><p>ajaxSampleSvc.js是动态生成的：</p><pre class="code">function ajaxSampleSvc() { }

ajaxSampleSvc.castVote = function(callback, p0)
{ 
  DWREngine._execute(callback, '/ajax-demo/dwr', 
 'ajaxSampleSvc', 'castVote', p0);
}
</pre><p>现在可以使用JavaScript对象ajaxSampleSvc替换所有的XmlHttpRequest代码，从而重构raw-ajax.html文件。可以在dwr-ajax.html文件中看到改动的结果；下面是新的JavaScript函数：</p><pre class="code">function castVote(rank) {
  ajaxSampleSvc.castVote(processResponse, rank);
}
function processResponse(data) {
 var voteText = "<p><strong>Thanks for Voting!</strong></p>"
    + "<p>Current ranking: " + data.voteAverage 
    + " out of 5</p>" 
    + "<p>Number of votes placed: " 
    + data.numberOfVotes + "</p>";
 502 502'votes').innerHTML = voteText;       
}
</pre><p>惊人地简单，不是吗？由ajaxSampleSvc对象返回的Article域对象序列化为一个JavaScript对象，允许在它上面调用诸如numberOfVotes()和voteAverage()之类的方法。在动态生成并插入到DIV元素“votes”中的HTML代码内使用这些数据。</p><p><strong>下一步工作</strong></p><p>在后续文章中，我将继续有关Ajax的话题，涉及下面这些方面：</p><ul><li>Ajax最佳实践 </li></ul><p>像许多技术一样，Ajax是一把双刃剑。对于一些用例，其应用程序其实没有必要使用Ajax，使用了反而有损可用性。我将介绍一些不适合使用的模式，突出说明Ajax的一些消极方面，并展示一些有助于缓和这些消极方面的机制。例如，对Nerfilix电影浏览器来说，Ajax是合适的解决方案吗？或者，如何提示用户确实出了一些问题，而再次单击按钮也无济于事？</p><ul><li>管理跨请求的状态 </li></ul><p>在使用Ajax时，最初的文档DOM会发生一些变化，并且有大量的页面状态信息存储在客户端变量中。当用户跟踪一个链接到应用程序中的另一个页面时，状态就丢失了。当用户按照惯例单击Back按钮时，呈现给他们的是缓存中的初始页面。这会使用户感到非常迷惑！</p><ul><li>调试技巧 </li></ul><p>使用JavaScript在客户端执行更多的工作时，如果事情不按预期方式进行，就需要一些调试工具来帮助弄清出现了什么问题。</p><p><strong>结束语</strong></p><p>本文介绍了Ajax方法，并展示了如何使用它来创建一个动态且响应灵敏的Web应用程序。通过使用DWR框架，可以轻松地把Ajax融合到站点中，而无需担心所有必须执行的实际管道工作。</p><p>特别感谢Getahead IT咨询公司的Joe Walker和他的团队开发出DWR这样神奇的工具。感谢你们与世界共享它！</p><p><strong>下载</strong></p><p>本文中演示的应用程序源代码可供下载：<a href="http://www.okajax.com/info/codedown/200604576.htm"><font color="#002c99">/info/codedown/200604576.htm</font></a>(1.52 MB）。</p><p><strong>参考资料</strong></p><ul><li><a href="http://www.getahead.ltd.uk/dwr" target="_blank"><font color="#0000ff">http://www.getahead.ltd.uk/dwr</font></a>——Getahead IT咨询公司。 </li><li>Jesse James Garrett所撰写的“<a href="http://www.adaptivepath.com/publications/essays/archives/000385.php" target="_blank"><font color="#0000ff">Ajax: A New Approach to Web Applications</font></a>”（Adaptive Path，2005年二月）。 </li><li>“<a href="http://developer.apple.com/internet/webcontent/xmlhttpreq.html" target="_blank"><font color="#0000ff">Dynamic HTML and XML: The XMLHttpRequest Object</font></a>”（Apple Developer Connection）。 </li></ul><p><strong>原文出处      </strong>An Introduction To Ajax </p></span>
																		<pre>
																		</pre>
																</font>
														</span>
												</p>
										</servlet-mapping>
								</web-app>
						</pre>
				</pre>
		</pre>
<img src ="http://www.cnitblog.com/eastperson/aggbug/11757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eastperson/" target="_blank">东人EP</a> 2006-06-07 12:56 <a href="http://www.cnitblog.com/eastperson/archive/2006/06/07/11757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>喜欢Ajax的十大理由</title><link>http://www.cnitblog.com/eastperson/archive/2006/06/07/11756.html</link><dc:creator>东人EP</dc:creator><author>东人EP</author><pubDate>Wed, 07 Jun 2006 04:53:00 GMT</pubDate><guid>http://www.cnitblog.com/eastperson/archive/2006/06/07/11756.html</guid><wfw:comment>http://www.cnitblog.com/eastperson/comments/11756.html</wfw:comment><comments>http://www.cnitblog.com/eastperson/archive/2006/06/07/11756.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/eastperson/comments/commentRss/11756.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eastperson/services/trackbacks/11756.html</trackback:ping><description><![CDATA[
		<p>保守来说，AJAX在现在是热得不能再热的技术。没有人能否认，它拥有大批的支持者。在CNN上，它从二月份的一个不被看好的词语到十月份成长成一个初具雏形的技术。所以，有必要要看看为什么AJAX能发展成为现在的样子，为什么它能不断成长，并且在短的时间内迅速变得无处不在。所以，我用午夜谈话的风格，来给出需要AJAX技术的十大理由。</p>
		<p>使用AJAX的十大理由：</p>
		<p>10 XAML, XUL, XForms...等等。<br /><br />9 服务端技术的不确定性。<br /><br />8 Web2.0。<br /><br />7 被软件工业领袖们强势采用。<br /><br />6 和Flex 和 Flash等技术的很好的集成。<br /><br />5 边际成本低。<br /><br />4 能使常规的Web应用受益。<br /><br />3 跨浏览器和跨平台。<br /><br />2 以可用性和用户体验为王。<br /><br />1 基于公开标准。</p>
		<p>
				<strong>十大理由第一名：公开标准</strong>
		</p>
		<p>让我们从第一条开始，AJAX技术是基于被各大浏览器和平台都支持的公开标准的技术。这意味着该技术不怕技术提供商的技术封锁。组成AJAX技术的大多数技术都能放心的使用很多年，而那些不是热点的、最新的和未经考验的技术只能使用一段时间。现在，对于绝大多数的用户和企业来说，浏览器是一个可信任的应用平台，这在五年前就不是个问题了。对于AJAX来说，FIREFOX浏览器的基础Mozilla 1.0的发布并且支持XML HTTP Request对象是一个转折点。这种允许异步数据交换的技术好多年前就被IE浏览器支持了。这种支持和FIREFOX浏览器的大量被采用真正的使人们理解了跨浏览器的富Internet应用成为了可能。<br /><br />1）JavaScript or ECMA Script (Standard ECM A- 262)：一个有趣的事情是，Javascript是经过长时间后才成为被人们接受的技术，长时间以来，很多公司采用非Javascript技术的方针，幸运的是，这种状况被迅速的改变。<br /><br /><a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm"><font color="#0000ff">http://www.ecma-international.org/publications/standards/Ecma-262.htm</font></a>。<br /><br />2）XML：是一个来自W3C的、被广泛应用的标准。<br /><br /><a href="http://www.w3.org/XML/"><font color="#0000ff">http://www.w3.org/XML/</font></a>。<br /><br />3）HTML：<a href="http://www.w3.org/MarkUp/"><font color="#0000ff">http://www.w3.org/MarkUp/</font></a>. <br /><br />4）CSS：<a href="http://www.w3.org/Style/CSS/"><font color="#0000ff">http://www.w3.org/Style/CSS/</font></a>.<br /><br />5）XML HTTP Request Object：被Internet Explorer、Mozilla-based、Safari和Opera浏览器支持。</p>
		<p>
				<strong>十大理由第二名：可用性</strong>
		</p>
		<p>开发人员和设计人员开始认识到不仅大型的用户体验在市场上是成功的，而且也认识到这样体验是怎么来影响用户的开销的。基于AJAX技术的google地图比传统的选择MapQuest更成功，证明了提供更好的用户体验的产品的成功。AJAX技术是使网络应用有更好的可用性的一个领导性的技术。它允许从服务器端请求少量的信息，而不是整个网页。它增加了页面数据的更新但同时减少了页面的刷新和刷新等待，这些问题从网络已诞生就折磨着Web应用。<br /><br />人们已经知道他们需要一个优秀的用户界面并且有对该界面的投资意愿。前提条件是：用户能够快速的取得信息不管数据是一个内部网的应用还是一个广域网的服务。</p>
		<p>
				<strong>十大理由第三名：跨浏览器和跨平台的兼容性</strong>
		</p>
		<p>IE和基于Mozilla的FIREFOX是占据市场分额最大的两个浏览器，并且它们都支持在浏览器上轻松创建基于AJAX的WEB应用。现在开发运行在更为先进的WEB浏览器上的基于AJAX的富WEB应用成为了可能。这是为什么AJAX应用变得如此流行的一个最重要的原因。其实很多开发人员多年前就意识到AJAX技术流行的可能，但一直没有流行是因为浏览器厂商的原因。感谢Mozilla和FIREFOX。</p>
		<p>
				<strong>十大理由第四名：使常规的WEB应用受益</strong>
		</p>
		<p>AJAX技术是当今WEB应用的门面——WEB应用获得的利益超过了桌面应用。这些利益包括部署应用的低投入、维护方便、缩短开发时间和不需要安装。这些都是促使商业和用户自从上世纪九十年代以来采用WEB应用的优点。AJAX技术不但能使WEB应用获得益处，而且使最终用户受益。</p>
		<p>
				<strong>十大理由第五名：促使技能、工具和技术的升级</strong>
		</p>
		<p>由于AJAX基于这些年一直使用的一些公开标准，很多的开发人员就会有新的技术方面的要求以便能够开发AJAX应用。但这并不意味着开发团队从基于HTML和FORM的应用转移到富AJAX型应用需要很高的学习曲线。同时，这意味着开发WEB应用的开发团体需要加速将他们的用户接口升级到AJAX，但并不需要一个大规模的升级和重写他们的WEB应用。自从上世纪九十年代以来，在开发基于浏览器应用方法花了大量投资的那些系统强烈的希望能在现有的应用的基础上增加用户体验。<br /><span class="90V"><font size="3"></font></span></p>
		<p>
				<strong>十大理由第六名：能和Flex 和 Flash等技术的很好的集成</strong>
		</p>
		<p>大多数的开发社区都不再支持Flash vs AJAX的火热讨论，这两种技术都在不同的场合拥有各自的优点和缺点，但是它们有大量的机会可以集成到一起工作。很多的开发人员和技术提供商意识到这一点，并且开发出了伟大的产品来集成Flex和AJAX协调使用。我们也热切的期望看到两者能在Macromedia里一起工作。</p>
		<p>
				<strong>十大理由第七名：采用率</strong>
		</p>
		<p>AJAX被业内领袖广泛采用证明了市场的欢迎程度和该技术组的正确。每一个该技术的使用者都成为了胜利者：包括google、yahoo、Amazon和微软等等。是google地图吸引了WEB开发人员的目光，当人们开始调查是什么原因使得google有着如此惊人的用户体验的时候，人们揭开了罩在AJAX头上的面纱。<br /><br />当然，仅仅是google使用AJAX是不够使得这项技术跨越从支流到主流的鸿沟的。但是，如果你看一看使用AJAX技术的客户如eBusiness Applications (www.ebusinessapps.com) or Tibco (<a href="http://www.tibco.com/"><font color="#0000ff">http://www.tibco.com</font></a>)等的表单时，你就会发现财富500强包括主要的金融机构、政府机构、航空公司和其他主要商业机构采用AJAX，并且在AJAX成为硬通货之前很早就开始使用了。</p>
		<p>
				<strong>十大理由第八名：WEB2.0</strong>
		</p>
		<p>喜欢也好，厌恶也罢。WEB2.0运行吸引了开发人员、风险投资商、市场和最终用户等所有的目光。这些明确的促进了AJAX的早期应用。当大肆的宣传过去以后，我们将会看到什么呢？从BackPack到google地图，AJAX界面是WEB2.0应用的主要的组成。大量的宣传有助于加速采用AJAX，而在可用性上的获益会使得该技术被广发应用。WEB2.0的一个主要原则是使用WEB作为一个应用开发的平台，而不仅仅是一个网页。高的可用性和交互能力的用户界面是一切应用平台的主要组成部分。</p>
		<p>
				<strong>十大理由第九名：AJAX基于服务器技术的不确定性</strong>
		</p>
		<p>和AJAX技术的浏览器的独立性相同，该技术也兼容所有的标准型的服务器和服务端语言，如PHP, ASP. ASP.Net, Perl, JSP, Cold Fusion等等，选择属于你的那种然后开始。这使得AJAX开发独立，因为所有的开发人员都能使用并且一起讨论相同的表现层。</p>
		<p>
				<strong>十大理由第十名：基于WEB的下一代RIA技术还没有出现</strong>
		</p>
		<p>今天就使用XUL技术开发应用的人是伟大的，因为现在90%的浏览器还不支持这种技术，对于大多数的实际应用来说，使用这种技术不切合实际。然而，AJAX开发人员应该给出一部分的注意力在这些技术，如XAML 和XUL上。毫无疑问，这些技术将使开发富WEB应用变得简单。但是它们可能相互不兼容并且拥有不同的市场需求或动力。<br /><br />在今后一段时间，AJAX技术将极大的提高WEB应用的可用性。AJAX技术并不完美，不是“火箭科学”许多的开发人员和技术公司始终在尝试RIA的其他更好的技术。而实际的问题是AJAX技术现在已经存在并且应用的很好，它跨浏览器、跨平台，而且不管是用户还是开发人员都喜欢它的作用。特征鲜明的AJAX应用如google地图已经成为了本领域的领导者（还有人使用MapQuest吗？）同样的，领先的财富500强使用AJAX技术并且贡献了开发工具给社区了。一般来说，业内在使用AJAX技术上取得了一致并且正在使用它。再强调一次，RIA应用和WEB应用使用了AJAX获得的一个主要的优势不仅仅是开发人员的一个工具，而是一个现象：它改变了我们开发WEB应用的方式。没人能说得清楚在RIA应用方面，哪一种技术会取代它，会在什么时候取代它；但是很多因素都支持AJAX应用应该持续好多年。</p>
		<p>
				<strong>关于作者<br /><br /></strong>Andre Charland从事Internet软件开始超过十年之久，他是eBusiness Applications (www.ebusinessapps.com)公司的主席和创建者之一。他和Dave Johnson在1998年创建了该公司。他主要的经验在可用性、市场、项目管理和基于构件的软件开发。所受教育包括：在Vancouver, BC的Simon Fraser University，他在那里读计算机科学和工商管理。他作为开发者、管理者和架构师等不同身份有上百个Internet项目的经验。<br /></p>
<img src ="http://www.cnitblog.com/eastperson/aggbug/11756.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eastperson/" target="_blank">东人EP</a> 2006-06-07 12:53 <a href="http://www.cnitblog.com/eastperson/archive/2006/06/07/11756.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX实例入门</title><link>http://www.cnitblog.com/eastperson/archive/2006/06/06/11716.html</link><dc:creator>东人EP</dc:creator><author>东人EP</author><pubDate>Tue, 06 Jun 2006 13:45:00 GMT</pubDate><guid>http://www.cnitblog.com/eastperson/archive/2006/06/06/11716.html</guid><wfw:comment>http://www.cnitblog.com/eastperson/comments/11716.html</wfw:comment><comments>http://www.cnitblog.com/eastperson/archive/2006/06/06/11716.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/eastperson/comments/commentRss/11716.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eastperson/services/trackbacks/11716.html</trackback:ping><description><![CDATA[
		<p>AJAX实例入门</p>
		<p>一、开门见山 </p>
		<p>　　这些时间，瞎子也看得见，AJAX正大踏步的朝我们走来。不管我们是拥护也好，反对也罢，还是视而不见，AJAX像一阵潮流，席转了我们所有的人。</p>
		<p>　　关于AJAX的定义也好，大话也好，早有人在网上发表了汗牛充栋的文字，在这里我也不想照本宣科。</p>
		<p>　　只想说说我感觉到的一些优点，对于不对，大家也可以和我讨论：</p>
		<p>　　首先是异步交互，用户感觉不到页面的提交，当然也不等待页面返回。这是使用了AJAX技术的页面给用户的第一感觉。</p>
		<p>　　其次是响应速度快，这也是用户强烈体验。</p>
		<p>　　然后是与我们开发者相关的，复杂UI的成功处理，一直以来，我们对B/S模式的UI不如C/S模式UI丰富而苦恼。现在由于AJAX大量使用JS，使得复杂的UI的设计变得更加成功。</p>
		<p>　　最后，AJAX请求的返回对象为XML文件，这也是一个潮流，就是WEB SERVICE潮流一样。易于和WEB SERVICE结合起来。</p>
		<p>　　好了，闲话少说，让我们转入正题吧。</p>
		<p>　　我们的第一个例子是基于Servlet为后台的一个web应用。</p>
		<p>　　二、基于Servlet的AJAX</p>
		<p>　　这是一个很常见的UI，当用户在第一个选择框里选择ZHEJIANG时，第二个选择框要出现ZHEJIANG的城市；当用户在第一个选择框里选择JIANGSU时，第二个选择框里要出现JIANGSU的城市。</p>
		<p>　　首先，我们来看配置文件web.xml，在里面配置一个servlet，跟往常一样：</p>
		<p>&lt;web-app version="2.4" <br />xmlns="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a>" <br />xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" <br />xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a><br /><a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</a>"&gt; </p>
		<p>&lt;servlet&gt; <br />&lt;servlet-name&gt;SelectCityServlet&lt;/servlet-name&gt; <br />&lt;servlet-class&gt;com.stephen.servlet.SelectCityServlet&lt;/servlet-class&gt; <br />&lt;/servlet&gt; </p>
		<p>&lt;servlet-mapping&gt; <br />&lt;servlet-name&gt;SelectCityServlet&lt;/servlet-name&gt; <br />&lt;url-pattern&gt;/servlet/SelectCityServlet&lt;/url-pattern&gt; <br />&lt;/servlet-mapping&gt; </p>
		<p>&lt;/web-app&gt;</p>
		<p>　　然后，来看我们的JSP文件：</p>
		<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;MyHtml.html&lt;/title&gt;</p>
		<p>&lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&gt;<br />&lt;meta http-equiv="description" content="this is my page"&gt;</p>
		<p>&lt;!--&lt;link rel="stylesheet" type="text/css" href="./styles.css"&gt;--&gt;</p>
		<p>&lt;/head&gt;<br />&lt;script type="text/javascript"&gt;<br />function getResult(stateVal) {<br />　　var url = "servlet/SelectCityServlet?state="+stateVal; <br />　　if (window.XMLHttpRequest) { <br />　　req = new XMLHttpRequest(); <br />　　}else if (window.ActiveXObject) { <br />　　req = new ActiveXObject("Microsoft.XMLHTTP"); <br />　　} <br />　　if(req){ <br />　　req.open("GET",url, true); <br />　　req.onreadystatechange = complete; <br />　　req.send(null); <br />　　} <br />} <br />function complete(){<br />　　if (req.readyState == 4) { <br />　　if (req.status == 200) { <br />　　var city = req.responseXML.getElementsByTagName("city"); <br />　　<a href="file://alert(city.length">file://alert(city.length</a>);<br />　　var str=new Array();<br />　　for(var i=0;i&lt;city.length;i++){<br />　　str[i]=city[i].firstChild.data;<br />　　}<br />　　<a href="file://alert(document.getElementById(&quot;city">file://alert(document.getElementById("city</a>"));<br />　　buildSelect(str,document.getElementById("city"));<br />　　}<br />　　}<br />}<br />function buildSelect(str,sel) {<br />　　sel.options.length=0;<br />　　for(var i=0;i&lt;str.length;i++) {<br />　　sel.options[sel.options.length]=new Option(str[i],str[i])<br />　　}<br />}<br />&lt;/script&gt;<br />&lt;body&gt;<br />&lt;select name="state" onChange="getResult(this.value)"&gt;<br />　　&lt;option value=""&gt;Select&lt;/option&gt;&gt;<br />　　&lt;option value="zj"&gt;ZEHJIANG&lt;/option&gt;&gt;<br />　　&lt;option value="zs"&gt;JIANGSU&lt;/option&gt;&gt;<br />&lt;/select&gt;<br />&lt;select id="city"&gt;<br />　　&lt;option value="/blog/"&gt;CITY&lt;/option&gt;<br />&lt;/select&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
		<p>　　第一眼看来，跟我们平常的JSP没有两样。仔细一看，不同在JS里头。</p>
		<p>　　我们首先来看第一个方法：getResult(stateVal)，在这个方法里，首先是取得XmlHttpRequest；然后设置该请求的url：req.open("GET",url, true);接着设置请求返回值的接收方法：req.onreadystatechange = complete;该返回值的接收方法为——complete();最后是发送请求：req.send(null);</p>
		<p>　　然后我们来看我们的返回值接收方法：complete()，这这个方法里，首先判断是否正确返回，如果正确返回，用DOM对返回的XML文件进行解析。关于DOM的使用，这里不再讲述，请大家参阅相关文档。得到city的值以后，再通过buildSelect(str,sel)方法赋值到相应的选择框里头去。</p>
		<p>　　最后我们来看看Servlet文件：</p>
		<p>import java.io.IOException;<br />import java.io.PrintWriter;</p>
		<p>import javax.servlet.ServletException;<br />import javax.servlet.http.HttpServlet;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;</p>
		<p>/**<br />* @author Administrator<br />*<br />* TODO To change the template for this generated type comment go to<br />* Window - Preferences - Java - Code Style - Code Templates<br />*/<br />public class SelectCityServlet extends HttpServlet {</p>
		<p>
				<br />　　public SelectCityServlet() {<br />　　super();<br />　　}</p>
		<p>　　public void destroy() {<br />　　super.destroy(); <br />　　}</p>
		<p>　　public void doGet(HttpServletRequest request, HttpServletResponse response)<br />　　throws ServletException, IOException {<br />　　response.setContentType("text/xml");<br />　　response.setHeader("Cache-Control", "no-cache");<br />　　String state = request.getParameter("state");<br />　　StringBuffer sb=new StringBuffer("&lt;state&gt;");<br />　　if ("zj".equals(state)){<br />　　sb.append("&lt;city&gt;hangzhou&lt;/city&gt;&lt;city&gt;huzhou&lt;/city&gt;");<br />　　} else if("zs".equals(state)){<br />　　sb.append("&lt;city&gt;nanjing&lt;/city&gt;&lt;city&gt;yangzhou&lt;/city&gt;&lt;city&gt;suzhou&lt;/city&gt;");<br />　　}<br />　　sb.append("&lt;/state&gt;");<br />　　PrintWriter out=response.getWriter();<br />　　out.write(sb.toString());<br />　　out.close();<br />　　}<br />}</p>
		<p>　　这个类也十分简单，首先是从request里取得state参数，然后根据state参数生成相应的XML文件，最后将XML文件输出到PrintWriter对象里。</p>
		<p>　　到现在为止，第一个例子的代码已经全部结束。是不是比较简单？我们进入到第二个实例吧！这次是基于JSP的AJAX的一个应用。</p>
		<p>　　三、基于JSP的AJAX</p>
		<p>这个例子是关于输入校验的问题，我们知道，在申请用户的时候，需要去数据库对该用户性进行唯一性确认，然后才能继续往下申请。</p>
		<p>　　这种校验需要访问后台数据库，但又不希望用户在这里提交后等待，当然是AJAX技术大显身手的时候了。</p>
		<p>　　首先来看显示UI的JSP:</p>
		<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;Check.html&lt;/title&gt;</p>
		<p>&lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&gt;<br />&lt;meta http-equiv="description" content="this is my page"&gt;</p>
		<p>&lt;!--&lt;link rel="stylesheet" type="text/css" href="./styles.css"&gt;--&gt;</p>
		<p>&lt;/head&gt;<br />&lt;script type="text/javascript"&gt;<br />var http_request = false;<br />function send_request(url) {//初始化、指定处理函数、发送请求的函数<br />http_request = false;<br />file://开始初始化XMLHttpRequest对象<br />if(window.XMLHttpRequest) { <a href="file://Mozilla">file://Mozilla</a> 浏览器<br />　　http_request = new XMLHttpRequest();<br />　　if (http_request.overrideMimeType) {//设置MiME类别<br />　　http_request.overrideMimeType('text/xml');<br />　　}<br />}<br />else if (window.ActiveXObject) { // IE浏览器<br />　　try {<br />　　http_request = new ActiveXObject("Msxml2.XMLHTTP");<br />　　} catch (e) {<br />　　try {<br />　　http_request = new ActiveXObject("Microsoft.XMLHTTP");<br />　　} catch (e) {}<br />　　}<br />}<br />if (!http_request) { // 异常，创建对象实例失败<br />　　window.alert("不能创建XMLHttpRequest对象实例.");<br />　　return false;<br />}<br />http_request.onreadystatechange = processRequest;<br />// 确定发送请求的方式和URL以及是否同步执行下段代码<br />http_request.open("GET", url, true);<br />http_request.send(null);<br />}<br />// 处理返回信息的函数<br />　　function processRequest() {<br />　　if (http_request.readyState == 4) { // 判断对象状态<br />　　if (http_request.status == 200) { // 信息已经成功返回，开始处理信息<br />　　alert(http_request.responseText);<br />　　} else { file://页面不正常<br />　　alert("您所请求的页面有异常。");<br />　　}<br />　　}<br />　　}<br />function userCheck() {<br />var f = document.form1;<br />var username = f.username.value;<br />if(username=="") {<br />　　window.alert("The user name can not be null!");<br />　　f.username.focus();<br />　　return false;<br />}<br />else {<br />　　send_request('check1.jsp?username='+username);<br />}<br />}</p>
		<p>&lt;/script&gt;<br />&lt;body&gt;<br />&lt;form name="form1" action="" method="post"&gt;<br />User Name:&lt;input type="text" name="username" value=""&gt;&amp;nbsp;<br />&lt;input type="button" name="check" value="check" onClick="userCheck()"&gt;<br />&lt;input type="submit" name="submit" value="submit"&gt;<br />&lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
		<p>　　所有的JS都跟上一个例子一样，不同的只是对返回值的操作，这次是用alert来显示：alert(http_request.responseText);</p>
		<p>　　我们来看处理逻辑JSP:</p>
		<p>&lt;%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %&gt;<br />&lt;%<br />String username= request.getParameter("username");<br />if("educhina".equals(username)) out.print("用户名已经被注册，请更换一个用户名。");<br />else out.print("用户名尚未被使用，您可以继续。");<br />%&gt;</p>
		<p>　　非常简单，先取得参数，然后作处理，最后将结果打印在out里。<br />　　我们的第三个例子仍然以这个唯一性校验为例子，这次结合Struts开发框架来完成AJAX的开发。</p>
		<p>　　四、基于Struts的AJAX</p>
		<p>　　首先，我们仍然是对Struts应用来做配置，仍然是在struts-config,xml文件里做配置，如下：</p>
		<p>&lt;action type="com.ajax.CheckAction"<br />　　scope="request" path="/ajax/check"&gt;<br />　　&lt;forward name="success" path="/check.jsp"/&gt;<br />&lt;/action&gt;</p>
		<p>
				<br />　　跟普通的Struts应用的配置一样，只是没有ActionForm的配置。</p>
		<p>　　下面是Action类：</p>
		<p>package com.ajax;</p>
		<p>import java.io.PrintWriter;</p>
		<p>import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;</p>
		<p>import org.apache.struts.action.Action;<br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.action.ActionForward;<br />import org.apache.struts.action.ActionMapping;<br />import org.apache.struts.action.DynaActionForm;</p>
		<p>/**<br />* @author Administrator<br />*<br />* TODO To change the template for this generated type comment go to<br />* Window - Preferences - Java - Code Style - Code Templates<br />*/<br />public class CheckAction extends Action<br />{<br />public final ActionForward execute(ActionMapping mapping, ActionForm form,<br />　　HttpServletRequest request,<br />　　HttpServletResponse response)<br />throws Exception<br />{<br />　　System.out.println("haha...............................");<br />　　String username= request.getParameter("username");<br />　　System.out.println(username);<br />　　String retn;<br />　　if("educhina".equals(username)) retn = "Can't use the same name with the old use,pls select a difference...";<br />　　else retn = "congraducation!you can use this name....";<br />　　PrintWriter out=response.getWriter();<br />　　out.write(retn);<br />　　out.close();<br />　　return mapping.findForward("success");<br />}<br />public static void main(String[] args)<br />{<br />}<br />}</p>
		<p>　　我们可以看到里面的逻辑跟上例中Servlet里的逻辑一样。最后，我们来看看JSP:</p>
		<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;Check.html&lt;/title&gt;</p>
		<p>&lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&gt;<br />&lt;meta http-equiv="description" content="this is my page"&gt;</p>
		<p>&lt;!--&lt;link rel="stylesheet" type="text/css" href="./styles.css"&gt;--&gt;</p>
		<p>&lt;/head&gt;<br />&lt;script type="text/javascript"&gt;<br />var http_request = false;<br />function send_request(url) {//初始化、指定处理函数、发送请求的函数<br />http_request = false;<br />file://开始初始化XMLHttpRequest对象<br />if(window.XMLHttpRequest) { <a href="file://Mozilla">file://Mozilla</a> 浏览器<br />　　http_request = new XMLHttpRequest();<br />　　if (http_request.overrideMimeType) {//设置MiME类别<br />　　http_request.overrideMimeType('text/xml');<br />　　}<br />}<br />else if (window.ActiveXObject) { // IE浏览器<br />　　try {<br />　　http_request = new ActiveXObject("Msxml2.XMLHTTP");<br />　　} catch (e) {<br />　　try {<br />　　http_request = new ActiveXObject("Microsoft.XMLHTTP");<br />　　} catch (e) {}<br />　　}<br />}<br />if (!http_request) { // 异常，创建对象实例失败<br />　　window.alert("不能创建XMLHttpRequest对象实例.");<br />　　return false;<br />}<br />http_request.onreadystatechange = processRequest;<br />// 确定发送请求的方式和URL以及是否同步执行下段代码<br />http_request.open("GET", url, true);<br />http_request.send(null);<br />}<br />// 处理返回信息的函数<br />　　function processRequest() {<br />　　if (http_request.readyState == 4) { // 判断对象状态<br />　　if (http_request.status == 200) { // 信息已经成功返回，开始处理信息<br />　　alert(http_request.responseText);<br />　　} else { file://页面不正常<br />　　alert("您所请求的页面有异常。");<br />　　}<br />　　}<br />　　}<br />function userCheck() {<br />var f = document.forms[0];<br />var username = f.username.value;<br />if(username=="") {<br />　　window.alert("The user name can not be null!");<br />　　f.username.focus();<br />　　return false;<br />}<br />else {<br />　　send_request('ajax/check.do?username='+username);<br />}<br />}</p>
		<p>&lt;/script&gt;<br />&lt;body&gt;<br />&lt;form name="form1" action="" method="post"&gt;<br />User Name:&lt;input type="text" name="username" value=""&gt;&amp;nbsp;<br />&lt;input type="button" name="check" value="check" onClick="userCheck()"&gt;<br />&lt;input type="submit" name="submit" value="/blog/submit"&gt;<br />&lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
		<p>　　我们可以看到，JSP基本是一样的，除了要发送的url：ajax/check.do?username="+username。</p>
		<p>　　最后，我们来看一个基于Struts和AJAX的复杂一些的例子，如果不用AJAX技术，UI的代码将十分复杂<br /> <br /> <br /></p>
<img src ="http://www.cnitblog.com/eastperson/aggbug/11716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eastperson/" target="_blank">东人EP</a> 2006-06-06 21:45 <a href="http://www.cnitblog.com/eastperson/archive/2006/06/06/11716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>