﻿<?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>BlogJava-忆风-随笔分类-Ajax</title><link>http://www.blogjava.net/yifeng/category/34011.html</link><description>光是知道是不够的，必须要加以应用；光是希望是不够的，非去做不可。</description><language>zh-cn</language><lastBuildDate>Mon, 25 Aug 2008 19:33:34 GMT</lastBuildDate><pubDate>Mon, 25 Aug 2008 19:33:34 GMT</pubDate><ttl>60</ttl><item><title>AJAX基础与实践(六) </title><link>http://www.blogjava.net/yifeng/archive/2008/08/26/224346.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Mon, 25 Aug 2008 18:57:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2008/08/26/224346.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/224346.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2008/08/26/224346.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/224346.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/224346.html</trackback:ping><description><![CDATA[&nbsp;
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">AJAX</span><span style="font-size: 14pt; font-family: 宋体">以</span><span style="font-size: 14pt"> JSON </span><span style="font-size: 14pt; font-family: 宋体">发送请求数据</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">使用</span>XML <span style="font-family: 宋体">向服务器发送复杂的数据结构，</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">通过串连接来创建</span>XML <span style="font-family: 宋体">串并不好，</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">这也不是用来生成或修改</span>XML <span style="font-family: 宋体">数据结构的健壮技术。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>JSQN <span style="font-family: 宋体">概述</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>&nbsp;*<span style="font-family: 宋体">　</span>JSON <span style="font-family: 宋体">是</span> XML <span style="font-family: 宋体">的一个替代方法，可以在</span>www.Json.org <span style="font-family: 宋体">找到。</span></p>
            <p>&nbsp;*<span style="font-family: 宋体">　</span>JSON <span style="font-family: 宋体">是一种文本格式，它独立于具体语言，</span></p>
            <p>&nbsp;*<span style="font-family: 宋体">　使用了与</span>C <span style="font-family: 宋体">系列语言</span>(<span style="font-family: 宋体">如</span>C <span style="font-family: 宋体">、</span>C# <span style="font-family: 宋体">、</span>JavaScript <span style="font-family: 宋体">等</span>)<span style="font-family: 宋体">类似的约定。</span></p>
            <p>&nbsp;*<span style="font-family: 宋体">　</span>JSON<span style="font-family: 宋体">建立在以下</span> <span style="font-family: 宋体">两种数据结构基础上，当前几乎所有编程语言都支持这两种数据结构。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt; font-family: 宋体">两种数据结构</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">名</span>/<span style="font-family: 宋体">值对集合。</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>&nbsp;*<span style="font-family: 宋体">　不同的语言中，它被理解为对象（</span>object<span style="font-family: 宋体">），纪录</span>&nbsp;<span style="font-family: 宋体">（</span>record<span style="font-family: 宋体">），结构（</span>struct<span style="font-family: 宋体">），字典（</span>dictionary<span style="font-family: 宋体">），哈希表（</span>hash table<span style="font-family: 宋体">），有键列表（</span>keyed list<span style="font-family: 宋体">），或者关联数组</span> <span style="font-family: 宋体">（</span>associative array<span style="font-family: 宋体">）。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">　值的有序表。</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>&nbsp;*<span style="font-family: 宋体">　这通常实现为一个数组。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">JSON</span><span style="font-size: 14pt; font-family: 宋体">的数据结构</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>JSON<span style="font-family: 宋体">对象</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>&nbsp;*<span style="font-family: 宋体">　</span> <span style="font-family: 宋体">对象是一个无序的&#8220;&#8216;名称</span>/<span style="font-family: 宋体">值&#8217;对&#8221;集合。一个对象以&#8220;</span>{<span style="font-family: 宋体">&#8221;（左括号）开始，&#8220;</span>}<span style="font-family: 宋体">&#8221;（右括号）结束。每个&#8220;名称&#8221;后跟一个&#8220;</span>:<span style="font-family: 宋体">&#8221;（冒号）；&#8220;&#8216;名称</span>/<span style="font-family: 宋体">值&#8217;</span> <span style="font-family: 宋体">对&#8221;之间使用&#8220;</span>,<span style="font-family: 宋体">&#8221;（逗号）分隔。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<br />
<img height="113" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/object.gif" width="598" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;
<table style="border-right: medium none; border-top: medium none; border-left: medium none; width: 468.25pt; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" width="624" border="1">
    <tbody>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>JSON<span style="font-family: 宋体">数组</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>&nbsp;&nbsp;&nbsp; *&nbsp;<span style="font-family: 宋体">数组是值（</span>value<span style="font-family: 宋体">）的有序集合。一个数组以&#8220;</span>[<span style="font-family: 宋体">&#8221;（左中括号）开始，&#8220;</span>]<span style="font-family: 宋体">&#8221;（右中括号）结束。值之间使用&#8220;</span>,<span style="font-family: 宋体">&#8221;（逗号）分隔。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<img height="113" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/array.gif" width="598" border="0" /><br />
<table style="border-right: medium none; border-top: medium none; border-left: medium none; width: 466.1pt; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" width="621" border="1">
    <tbody>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">值</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>&nbsp;&nbsp;&nbsp; *&nbsp;<span style="font-family: 宋体">值（</span>value<span style="font-family: 宋体">）可以是双引号括起来的字符串（</span>string<span style="font-family: 宋体">）、数值</span>(number)<span style="font-family: 宋体">、</span>true<span style="font-family: 宋体">、</span>false<span style="font-family: 宋体">、</span> null<span style="font-family: 宋体">、对象（</span>object<span style="font-family: 宋体">）或者数组（</span>array<span style="font-family: 宋体">）。这些结构可以嵌套。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<br />
<img height="278" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/value.gif" width="598" border="0" /><br />
<table style="border-right: medium none; border-top: medium none; border-left: medium none; width: 466.1pt; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" width="621" border="1">
    <tbody>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">字符串（</span>string<span style="font-family: 宋体">）</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p style="text-indent: 21pt">*&nbsp;<span style="font-family: 宋体">字符串（</span>string<span style="font-family: 宋体">）是由双引号包围的任意数量</span>Unicode<span style="font-family: 宋体">字符的集合，使用反斜线转义。一个字符（</span>character<span style="font-family: 宋体">）即一个单独的字符串（</span>character string<span style="font-family: 宋体">）。</span></p>
            <p style="text-indent: 21pt">*&nbsp;<span style="font-family: 宋体">字符串（</span>string<span style="font-family: 宋体">）与</span>C<span style="font-family: 宋体">或者</span>Java<span style="font-family: 宋体">的字符串非常相似。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<br />
<img height="413" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/string.gif" width="598" border="0" />
<table style="border-right: medium none; border-top: medium none; border-left: medium none; width: 466.1pt; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" width="621" border="1">
    <tbody>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">数值（</span>number<span style="font-family: 宋体">）</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>&nbsp;&nbsp;&nbsp; *&nbsp;<span style="font-family: 宋体">数值（</span><em><span style="font-family: 'Calibri','sans-serif'">number</span></em><span style="font-family: 宋体">）也与</span>C<span style="font-family: 宋体">或者</span>Java<span style="font-family: 宋体">的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<img height="266" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/number.gif" width="598" border="0" />
<table style="border-right: medium none; border-top: medium none; border-left: medium none; width: 466.1pt; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" width="621" border="1">
    <tbody>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">空白可以加入到任何符号之间。</span> <span style="font-family: 宋体">以下描述了完整的语言。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">在</span><a href="http://www.json.org/">http://www.json.org/</a><span style="font-family: 宋体">能得到</span>JSON<span style="font-family: 宋体">。</span></p>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">DEMO JSON</span><span style="font-size: 14pt; font-family: 宋体">对象</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">我们可以以</span>Employee<span style="font-family: 宋体">对象的简单的例子展开进行。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>Employee<span style="font-family: 宋体">对象可能包含姓、名、员工号和职位等数据。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">使用</span>JSON<span style="font-family: 宋体">，可以如下表示</span>Employee<span style="font-family: 宋体">对象实例：</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>var employee = {</p>
            <p>&nbsp;&#8220;firstName&#8221;:&#8221;Zhou&#8221;,</p>
            <p>&nbsp;&#8220;lastName&#8221;:&#8221;DaQing&#8221;,</p>
            <p>&nbsp;&#8220;employeeNumber&#8221;:517,</p>
            <p>&nbsp;&#8220;title&#8221;:&#8221;Accountant&#8221;</p>
            <p>}</p>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">然后可以使用标准点记法使用对象的属性，如下所示：</span></p>
<p style="margin-left: 42pt; text-indent: -21pt"><span style="font-family: Wingdings">n&nbsp;</span>var lastName = employee.lastName;</p>
<p style="margin-left: 42pt; text-indent: -21pt"><span style="font-family: Wingdings">n&nbsp;</span>var title = employee.title;</p>
<p style="margin-left: 42pt; text-indent: -21pt"><span style="font-family: Wingdings">n&nbsp;</span>employee.employee = 517;</p>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">JSON</span><span style="font-size: 14pt; font-family: 宋体">与</span><span style="font-size: 14pt">XML</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>JSON <span style="font-family: 宋体">是一个轻量级的数据互换格式。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">如果用</span> XML <span style="font-family: 宋体">来描述同样的</span>employee<span style="font-family: 宋体">对象，可能如下所示：</span> </p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>&lt;employee&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;firstName&gt;Zhou&lt;/firstName&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;lastName&gt;DaQing&lt;/lastName&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;employeeNumbe&gt;517&lt;/employeeNumbe&gt; </p>
            <p>&nbsp;&nbsp;&nbsp; &lt;title&gt;Accountant&lt;/title&gt; </p>
            <p>&lt;/employee &gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">显然，</span>JSON<span style="font-family: 宋体">编码比</span>XML <span style="font-family: 宋体">编码简短。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">如果在网络上发送大量数据，可能会带来显著的性能差异。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>www.Json.org <span style="font-family: 宋体">网站列出了至少与其他编程语言的</span>14<span style="font-family: 宋体">种绑定</span> <span style="font-family: 宋体">。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">这说明，不论在服务器端使用何种技术，都能通过</span>JSON<span style="font-family: 宋体">与浏览器通信。</span></p>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">JSON</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">因为这些结构得到了如此众多编程语言的支持，所以</span>JSON <span style="font-family: 宋体">可以作为异构系统之间的一种数据互换格式。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">另外，由于</span>JSON <span style="font-family: 宋体">是基于标准</span>JavaScript <span style="font-family: 宋体">的子集，所以在所有当前</span>Web <span style="font-family: 宋体">浏览器上都应该是兼容的。</span></p>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">DEMO AJAX</span><span style="font-size: 14pt; font-family: 宋体">以</span><span style="font-size: 14pt"> JSON </span><span style="font-size: 14pt; font-family: 宋体">发送请求数据</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>DEMO</p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>&nbsp;*<span style="font-family: 宋体">　使用</span>JSON <span style="font-family: 宋体">将</span>JavaScript <span style="font-family: 宋体">对象转换为串格式，</span></p>
            <p>&nbsp;*<span style="font-family: 宋体">　</span>Ajax <span style="font-family: 宋体">将这个串发送到服务器，</span></p>
            <p>&nbsp;*<span style="font-family: 宋体">　服务器根据这个串创建一个对象</span>.</p>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">撰写&#8220;</span>jsonExample.html<span style="font-family: 宋体">&#8221;，如下：</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "http://www.w3.org/TR/html4/loose.dtd"&gt;</p>
            <p>&lt;html&gt;</p>
            <p>&lt;head&gt;</p>
            <p>&nbsp;&lt;title&gt;JSON Example&lt;/title&gt;</p>
            <p>&nbsp;&nbsp; &lt;script type="text/javascript" src="/js/json2.js"&gt;&lt;/script&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript"&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var xmlHttp;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function createXMLHttpRequest() {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (window.ActiveXObject) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else&nbsp;if (window.XMLHttpRequest) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp = new XMLHttpRequest();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function doJSON() {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var car = getCarObject();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var carAsJSON = JSON.stringify(car);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("Car object as JSON:"n" + carAsJSON);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var url = "JSONExample?timeStamp=" + new Date().getTime();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; createXMLHttpRequest();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.open("POST", url, true);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.onreadystatechange = handleStateChange;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.send(carAsJSON);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function handleStateChange() {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (xmlHttp.readyState == 4) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (xmlHttp.status == 200) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parseResults();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function parseResults() {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var responseDiv = document.getElementById("serverResponse");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(responseDiv.hasChildNodes()) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; responseDiv.removeChild(responseDiv.childNodes[0]);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var responseText = document.createTextNode(xmlHttp.responseText);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; responseDiv.appendChild(responseText);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function getCarObject() {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new Car("Dodge","Coronet R/T",1989,"pink");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function Car(make, model, year, color) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.make = make;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.model = model;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.year = year;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.color = color;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;/script&gt;</p>
            <p>&lt;/head&gt;</p>
            <p>&lt;body&gt;</p>
            <p>&nbsp;&nbsp; &lt;br/&gt;&lt;br/&gt;</p>
            <p>&lt;form action="#"&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;input type="button" value="Click here to send JSON data to the server" onblur="doJSON();"/&gt;</p>
            <p>&lt;/form&gt;</p>
            <p>&nbsp;&nbsp; &lt;h2&gt;Server Response:&lt;/h2&gt;</p>
            <p>&lt;div id="serverResponse"&gt;&lt;/div&gt;</p>
            <p>&lt;/body&gt;</p>
            <p>&lt;/html&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">DEMO </span><span style="font-size: 14pt; font-family: 宋体">服务器端接收</span><span style="font-size: 14pt">JSON</span><span style="font-size: 14pt; font-family: 宋体">数据</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">然后撰写&#8220;</span>JSONExample.java<span style="font-family: 宋体">&#8221;文件，内容如下：</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>package org.yifeng.webapp.servlet;</p>
            <p>import org.json.JSONObject;</p>
            <p>import org.json.JSONException;</p>
            <p>import javax.servlet.http.HttpServlet;</p>
            <p>import javax.servlet.http.HttpServletRequest;</p>
            <p>import javax.servlet.http.HttpServletResponse;</p>
            <p>import javax.servlet.ServletException;</p>
            <p>import java.io.IOException;</p>
            <p>import java.io.BufferedReader;</p>
            <p>import java.text.ParseException;</p>
            <p>/**</p>
            <p>&nbsp;* Copyright:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">晟软科技</span></p>
            <p>&nbsp;* WebSit:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.shengruan.com</p>
            <p>&nbsp;* Author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">忆风</span></p>
            <p>&nbsp;* QQ:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 583305005</p>
            <p>&nbsp;* MSN:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YiFengs@msn.com</p>
            <p>&nbsp;* Email:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zhdqCN@gmail.com</p>
            <p>&nbsp;* CreationTime:&nbsp;&nbsp;&nbsp; 2008-8-26 0:49:12</p>
            <p>&nbsp;* Description:</p>
            <p>&nbsp;*/</p>
            <p>public class JSONExample extends HttpServlet {</p>
            <p>&nbsp;&nbsp;&nbsp; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String json = readJSONStringFromRequestBody(request);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<span style="font-family: 宋体">返回输出结果</span></p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String responseText = null;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<span style="font-family: 宋体">使用</span>JSON<span style="font-family: 宋体">绑字</span>Ajax<span style="font-family: 宋体">对象</span></p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSONObject jsonObject = null;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsonObject = new JSONObject(json);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; responseText = "You have a " + jsonObject.getInt("year") + " "</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + jsonObject.getString("make") + " " + jsonObject.getString("model")</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + " " + " that is " + jsonObject.getString("color") + " in color.";</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (JSONException e) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();&nbsp;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setContentType("text/xml");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.getWriter().print(responseText);</p>
            <p>&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp; private String readJSONStringFromRequestBody(HttpServletRequest request) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuilder json = new StringBuilder();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String line = null;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader reader = request.getReader();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((line = reader.readLine()) != null) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; json.append(line);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Error reading JSON stirng: " + e.toString());</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return json.toString();</p>
            <p>&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doPost(request, response);</p>
            <p>&nbsp;&nbsp;&nbsp; }</p>
            <p>}</p>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">点击按钮，显示如下：<br />
<img height="401" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/Ajax13.JPG" width="710" border="0" /></span></p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
    </tbody>
</table>
<p>OK,<span style="font-family: 宋体">看看，数据都显示出来了吧，呵呵！！！<br />
<br />
<br />
</p>
<hr />
<p> <br />
作者：周大庆（zhoudaqing） <br />
网址：<strong><font color="#ff0000">http://www.blogjava.net/yifeng</font></strong><br />
&gt;&gt;&gt;<span style="color: red"><strong>转载请注明出处！</strong></span>&lt;&lt;&lt; </span></p>
<img src ="http://www.blogjava.net/yifeng/aggbug/224346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2008-08-26 02:57 <a href="http://www.blogjava.net/yifeng/archive/2008/08/26/224346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX基础与实践(五)</title><link>http://www.blogjava.net/yifeng/archive/2008/08/26/224345.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Mon, 25 Aug 2008 18:47:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2008/08/26/224345.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/224345.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2008/08/26/224345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/224345.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/224345.html</trackback:ping><description><![CDATA[&nbsp;
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt; font-family: 宋体">发送请求参数</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">目前我们已经讲了</span></p>
<p style="margin-left: 39pt; text-indent: -18pt">1、&nbsp;<span style="font-family: 宋体">使用</span>Ajax<span style="font-family: 宋体">技术向服务器发送请求</span></p>
<p style="margin-left: 39pt; text-indent: -18pt">2、&nbsp;<span style="font-family: 宋体">也知道了可以采用多种方法解析服务器的响应。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">只缺少一个内容，就是未将任何数据作为请求的一部分发送给服务器。</span></p>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">GET</span><span style="font-size: 14pt; font-family: 宋体">方法发送请求参数</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>GET<span style="font-family: 宋体">方法：作为名</span>/<span style="font-family: 宋体">值对放在请求</span>URL <span style="font-family: 宋体">中传递。</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p style="tab-stops: 38.25pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<span style="font-family: 宋体">　资源</span>URL <span style="font-family: 宋体">的问号后面就是名</span>/<span style="font-family: 宋体">值对。</span></p>
            <p style="tab-stops: 33.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<span style="font-family: 宋体">　名</span>/<span style="font-family: 宋体">值对用</span> name=value <span style="font-family: 宋体">的形式，</span></p>
            <p style="tab-stops: 33.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * &nbsp;<span style="font-family: 宋体">用与号</span>(&amp;)<span style="font-family: 宋体">分隔。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">例如：</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>http://localhost:8080/projectName?name=yifeng&amp;password=hello</p>
            </td>
        </tr>
    </tbody>
</table>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">POST </span><span style="font-size: 14pt; font-family: 宋体">方法发送请求参数</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>POST <span style="font-family: 宋体">方法：将参数串放在请求体中发送。</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p style="text-indent: 20.25pt">*<span style="font-family: 宋体">　参数编码为名</span>/<span style="font-family: 宋体">值对，形式为</span>name=value<span style="font-family: 宋体">，</span></p>
            <p style="text-indent: 20.25pt">*<span style="font-family: 宋体">　用与号</span>(&amp;)<span style="font-family: 宋体">分隔。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt; font-family: 宋体">使用</span><span style="font-size: 14pt">GET</span><span style="font-size: 14pt; font-family: 宋体">和</span><span style="font-size: 14pt">POST</span><span style="font-size: 14pt; font-family: 宋体">的建议</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">获取数据时应当使用</span>GET <span style="font-family: 宋体">方法。</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>&nbsp;&nbsp;&nbsp; *<span style="font-family: 宋体">　数据处理不改变数据模型的状态。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">存储、更新数据，使用</span>POST <span style="font-family: 宋体">方法。</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>&nbsp;&nbsp;&nbsp; *<span style="font-family: 宋体">　操作改变了数据模型的状态。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">特点。</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p style="text-indent: 21pt">*<span style="font-family: 宋体">　</span>GET <span style="font-family: 宋体">请求的参数编码到请求</span>URL <span style="font-family: 宋体">中，可以为该</span>URL <span style="font-family: 宋体">建立书签。（不过，如果是异步请求就没有什么用。）</span></p>
            <p style="text-indent: 21pt">*<span style="font-family: 宋体">　</span>GET <span style="font-family: 宋体">请求发送的数据量通常是固定的，而</span>POST <span style="font-family: 宋体">方法可以发送任意量的数据。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">DEMO AJAX</span><span style="font-size: 14pt; font-family: 宋体">以名</span><span style="font-size: 14pt">/</span><span style="font-size: 14pt; font-family: 宋体">值对发送请求参数</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">使用</span>GET<span style="font-family: 宋体">请求和</span>POST<span style="font-family: 宋体">请求，创建查询字符串技术是一样的。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">唯一的区别是，</span>GET<span style="font-family: 宋体">发送请求时，查询字符串追加到请求</span>URL<span style="font-family: 宋体">中，</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>POST<span style="font-family: 宋体">方法时，在</span>XHR<span style="font-family: 宋体">对象的</span>send()<span style="font-family: 宋体">方法时发送查询串。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>DEMO</p>
<p style="margin-left: 42pt; text-indent: -21pt"><span style="font-family: Wingdings">n&nbsp;</span>getAndPostExample.html<span style="font-family: 宋体">文件</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 42pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "http://www.w3.org/TR/html4/loose.dtd"&gt;</p>
            <p>&lt;html&gt;</p>
            <p>&lt;head&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;title&gt;Dynamically Editing Page Content&lt;/title&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript" language="javascript"&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var xmlHttp;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function createXMLHttpRequest() {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (window.ActiveXObject) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else&nbsp;if (window.XMLHttpRequest) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp = new XMLHttpRequest();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function createQueryString() {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var firstName = document.getElementById("firstName").value;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var middleName = document.getElementById("middleName").value;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var birthday = document.getElementById("birthday").value;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var queryString = "firstName=" + firstName + "&amp;middleName=" + middleName + "&amp;birthday=" + birthday;//<span style="font-family: 宋体">名</span>/<span style="font-family: 宋体">值对</span></p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return queryString;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function doRequestUsingGET() {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; createXMLHttpRequest();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var queryString = "GetAndPostExample?";</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; queryString = queryString + createQueryString() + "&amp;timeStamp=" + new Date().getTime();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.onreadystatechange = handleStateChange;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.open("GET", queryString, true);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.send(null);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function doRequestUsingPOST() {</p>
            <p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;createXMLHttpRequest();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var url = "GetAndPostExample?timeStamp=" + new Date().getTime();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<span style="font-family: 宋体">相同方法生成名</span>/<span style="font-family: 宋体">值对</span></p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var queryString = createQueryString();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.open("POST", url, true);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.onreadystatechange = handleStateChange;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.send(queryString);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function handleStateChange() {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (xmlHttp.readyState == 4) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (xmlHttp.status == 200) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parseResults();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;}</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function parseResults() {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var responseDiv = document.getElementById("serverResponse");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (responseDiv.hasChildNodes()) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; responseDiv.removeChild(responseDiv.childNodes[0]);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var responseText = document.createTextNode(xmlHttp.responseText);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; responseDiv.appendChild(responseText);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;/script&gt;</p>
            <p>&lt;/head&gt;</p>
            <p>&lt;body&gt;</p>
            <p>&lt;h1&gt;Entery your first name, middle name, and birthday:&lt;/h1&gt;</p>
            <p>&lt;table&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;tbody&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;First name:&lt;/td&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;input type="text" id="firstName"/&gt;&lt;/td&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;Middle name:&lt;/td&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;input type="text" id="middleName"&gt;&lt;/td&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;Birthday:&lt;/td&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;input type="text" id="birthday"/&gt;&lt;/td&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;/tbody&gt;</p>
            <p>&lt;/table&gt;</p>
            <p>&lt;form action="#"&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;input type="button" value="Send parameters using GET" onclick="doRequestUsingGET();"/&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;br/&gt;&lt;br/&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;input type="button" value="Send parameters using POST" onclick="doRequestUsingPOST();"/&gt;</p>
            <p>&lt;/form&gt;</p>
            <p>&lt;br/&gt;</p>
            <p>&lt;h2&gt;Server Response:&lt;/h2&gt;</p>
            <p>&lt;div id="serverResponse"&gt;&lt;/div&gt;</p>
            <p>&lt;/body&gt;</p>
            <p>&lt;/html&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin-left: 42pt; text-indent: -21pt"><span style="font-family: Wingdings">n&nbsp;</span>GetAndPostExample.java<span style="font-family: 宋体">文件</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 42pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>package org.yifeng.webapp.servlet;</p>
            <p>import javax.servlet.http.HttpServlet;</p>
            <p>import javax.servlet.http.HttpServletRequest;</p>
            <p>import javax.servlet.http.HttpServletResponse;</p>
            <p>import javax.servlet.ServletException;</p>
            <p>import java.io.IOException;</p>
            <p>import java.io.PrintWriter;</p>
            <p>/**</p>
            <p>&nbsp;* Copyright:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">晟软科技</span></p>
            <p>&nbsp;* WebSit:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.shengruan.com</p>
            <p>&nbsp;* Author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">忆风</span></p>
            <p>&nbsp;* QQ:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 583305005</p>
            <p>&nbsp;* MSN:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YiFengs@msn.com</p>
            <p>&nbsp;* Email:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zhdqCN@gmail.com</p>
            <p>&nbsp;* CreationTime:&nbsp;&nbsp;&nbsp; 2008-8-25 22:44:44</p>
            <p>&nbsp;* Description:</p>
            <p>&nbsp;*/</p>
            <p>public class GetAndPostExample extends HttpServlet {</p>
            <p>&nbsp;&nbsp;&nbsp; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setContentType("text/xml");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String firstName = request.getParameter("firstName");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String middleName = request.getParameter("middleName");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String birthday = request.getParameter("birthday");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuilder responseText = new StringBuilder();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; responseText.append("Hello, ").append(firstName).append(" " + middleName)</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .append(". Your birthday is " + birthday + ".")</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .append("[Method: " + request.getMethod() + "]");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrintWriter out = response.getWriter();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println(responseText);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.flush();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.close();</p>
            <p>&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doPost(request, response);</p>
            <p>&nbsp;&nbsp;&nbsp; }</p>
            <p>}</p>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin-left: 42pt; text-indent: -21pt"><span style="font-family: Wingdings">n&nbsp;</span>Web.xml<span style="font-family: 宋体">配置</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 42pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</p>
            <p>&lt;web-app xmlns="http://java.sun.com/xml/ns/javaee"</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://java.sun.com/xml/ns/javaee</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version="2.5"&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;servlet&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;GetAndPostExample&lt;/servlet-name&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;org.yifeng.webapp.servlet.GetAndPostExample&lt;/servlet-class&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;/servlet&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;servlet-mapping&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;GetAndPostExample&lt;/servlet-name&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/GetAndPostExample&lt;/url-pattern&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;welcome-file-list&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;getAndPostExample.html&lt;/welcome-file&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;/welcome-file-list&gt;</p>
            <p>&lt;/web-app&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin-left: 42pt; text-indent: -21pt"><span style="font-family: Wingdings">n&nbsp;</span><span style="font-family: 宋体">如果以点击&#8220;</span>Send parameters using GET<span style="font-family: 宋体">&#8221;按钮，如下图：<br />
<img height="558" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/Ajax10.JPG" width="935" border="0" /></span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 42pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
    </tbody>
</table>
<p style="margin-left: 42pt; text-indent: -21pt"><span style="font-family: Wingdings">n&nbsp;</span><span style="font-family: 宋体">如果以点击&#8220;</span>Send parameters using POST<span style="font-family: 宋体">&#8221;按钮，如下图：<br />
<img height="558" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/Ajax11.JPG" width="933" border="0" /></span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 42pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
    </tbody>
</table>
<p style="margin-left: 42pt; text-indent: -21pt"><span style="font-family: Wingdings">n&nbsp;</span><span style="font-family: 宋体">也许你会疑问，为什么要在</span>URL<span style="font-family: 宋体">后面追加时间呢？</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 42pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p style="text-indent: 20.25pt">*&nbsp;<span style="font-family: 宋体">有时浏览器会把多个</span>XMLHttpRequest <span style="font-family: 宋体">请求的结果缓存在同一个</span>URL.</p>
            <p style="text-indent: 20.25pt">*&nbsp;<span style="font-family: 宋体">如果对每个请求的响应不同，这就会带来不好的结果</span>.</p>
            <p style="text-indent: 20.25pt">*&nbsp;<span style="font-family: 宋体">把当前时间戳追加到</span> URL<span style="font-family: 宋体">的最后，就能确保</span>URL <span style="font-family: 宋体">的唯一性，从而避免浏览器缓存结果</span>.</p>
            <p style="text-indent: 20.25pt">*&nbsp;IE<span style="font-family: 宋体">有这种缓存问题，但是</span>Firefox<span style="font-family: 宋体">没有。你可以去试试，哈哈。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">AJAX</span><span style="font-size: 14pt; font-family: 宋体">以</span><span style="font-size: 14pt"> XML </span><span style="font-size: 14pt; font-family: 宋体">发送请求数据</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">只是使用一个包含名</span>/<span style="font-family: 宋体">值对的简单查询串，这可能不够健壮，</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">不足以向服务器传递大量复杂的模型变化</span>.</p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">可以应用</span>XML</p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">如何向服务器发送</span>XML <span style="font-family: 宋体">呢</span>?</p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">可以把</span>XML <span style="font-family: 宋体">作为请求体的一部分发送到服务器，</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">这与</span>POST <span style="font-family: 宋体">请求中将查询串作为请求体的一部分进行发送异曲同工</span>.</p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">服务器可以从请求体读到</span>XM L<span style="font-family: 宋体">，并加以处理。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>DEMO</p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>postingXML.html</p>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">DEMO AJAX</span><span style="font-size: 14pt; font-family: 宋体">以</span><span style="font-size: 14pt"> XML </span><span style="font-size: 14pt; font-family: 宋体">发送请求数据</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">撰写&#8220;</span>postingXML.html<span style="font-family: 宋体">&#8221;文件，如下：</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "http://www.w3.org/TR/html4/loose.dtd"&gt;</p>
            <p>&lt;html&gt;</p>
            <p>&lt;head&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;title&gt;Sending and XML Request&lt;/title&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript"&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var xmlHttp;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function createXMLHttpRequest() {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (window.ActiveXObject) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");</p>
            <p>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else&nbsp;if (window.XMLHttpRequest) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp = new XMLHttpRequest();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <span style="font-family: 宋体">生成</span>XML</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function createXML() {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var xml = "&lt;pets&gt;";</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var options = document.getElementById("petTypes").childNodes;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var option = null;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (var i = 0; i &lt; options.length; i++) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; option = options[i];</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (option.selected) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml = xml + "&lt;type&gt;" + option.value + "&lt;"/type&gt;";</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml = xml + "&lt;"/pets&gt;";</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return xml;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function sendPetTypes() {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; createXMLHttpRequest();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var xml = createXML();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var url = "PostingXMLExample?timeStamp=" + new Date().getTime();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.open("POST", url, true);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.onreadystatechange = handleStateChange;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.send(xml);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function handleStateChange() {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (xmlHttp.readyState == 4) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (xmlHttp.status == 200) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parseResults();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function parseResults() {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var responseDiv = document.getElementById("serverResponse");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (responseDiv.hasChildNodes()) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; responseDiv.removeChild(responseDiv.childNodes[0]);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var responseText = document.createTextNode(xmlHttp.responseText);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; responseDiv.appendChild(responseText);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;/script&gt;</p>
            <p>&lt;/head&gt;</p>
            <p>&lt;body&gt;</p>
            <p>&lt;h1&gt;Select the types of pets in your home:&lt;/h1&gt;</p>
            <p>&lt;form action="#"&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;select id="petTypes" size="6" multiple="true"&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;option value="cats"&gt;Cats&lt;/option&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;option value="dogs"&gt;Dogs&lt;/option&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;option value="fish"&gt;Fish&lt;/option&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;option value="birds"&gt;Birds&lt;/option&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;option value="hamsters"&gt;Hamsters&lt;/option&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;option value="rabbits"&gt;Rabbits&lt;/option&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;/select&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;br/&gt;&lt;br/&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;input type="button" value="Submit Pets" onclick="sendPetTypes();"/&gt;</p>
            <p>&lt;/form&gt;</p>
            <p>&lt;h2&gt;Server Response:&lt;/h2&gt;</p>
            <p>&lt;div id="serverResponse"&gt;&lt;/div&gt;</p>
            <p>&lt;/body&gt;</p>
            <p>&lt;/html&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">撰写&#8220;</span>PostingXMLExample.java<span style="font-family: 宋体">&#8221;文件，如下：</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: #4f81bd 1pt dashed; padding-right: 5.4pt; border-top: #4f81bd 1pt dashed; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #4f81bd 1pt dashed; width: 426.1pt; padding-top: 0cm; border-bottom: #4f81bd 1pt dashed" valign="top" width="568">
            <p>package org.yifeng.webapp.servlet;</p>
            <p>import org.w3c.dom.Document;</p>
            <p>import org.w3c.dom.NodeList;</p>
            <p>import org.xml.sax.SAXException;</p>
            <p>import javax.servlet.http.HttpServlet;</p>
            <p>import javax.servlet.http.HttpServletRequest;</p>
            <p>import javax.servlet.http.HttpServletResponse;</p>
            <p>import javax.servlet.ServletException;</p>
            <p>import javax.xml.parsers.DocumentBuilderFactory;</p>
            <p>import javax.xml.parsers.ParserConfigurationException;</p>
            <p>import java.io.IOException;</p>
            <p>import java.io.BufferedReader;</p>
            <p>import java.io.ByteArrayInputStream;</p>
            <p>/**</p>
            <p>&nbsp;* Copyright:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">晟软科技</span></p>
            <p>&nbsp;* WebSit:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.shengruan.com</p>
            <p>&nbsp;* Author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">忆风</span></p>
            <p>&nbsp;* QQ:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 583305005</p>
            <p>&nbsp;* MSN:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YiFengs@msn.com</p>
            <p>&nbsp;* Email:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zhdqCN@gmail.com</p>
            <p>&nbsp;* CreationTime:&nbsp;&nbsp;&nbsp; 2008-8-25 23:30:41</p>
            <p>&nbsp;* Description:</p>
            <p>&nbsp;*/</p>
            <p>public class PostingXMLExample extends HttpServlet {</p>
            <p>&nbsp;&nbsp;&nbsp; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String xml = readXMLFromRequestBody(request);//<span style="font-family: 宋体">获得</span>XML<span style="font-family: 宋体">字符串</span></p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document xmlDoc = null;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes()));</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (SAXException e) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("SAXException: " + e);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (ParserConfigurationException e) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("ParserConfigurationException: " + e);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Java<span style="font-family: 宋体">与</span>JavaScript<span style="font-family: 宋体">均有</span>W3C DOM<span style="font-family: 宋体">的实现，比如</span>getElementByTagName<span style="font-family: 宋体">和</span>getNodeValue<span style="font-family: 宋体">方法</span></p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NodeList selectedPetTypes = xmlDoc.getElementsByTagName("type");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String type = null;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String responseText = "Selected Pets: ";</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; selectedPetTypes.getLength(); i++) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type = selectedPetTypes.item(i).getFirstChild().getNodeValue();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; responseText = responseText + " " + type;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setContentType("text/xml");</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.getWriter().print(responseText);</p>
            <p>&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp; private String readXMLFromRequestBody(HttpServletRequest request) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuilder xml = new StringBuilder();</p>
            <p>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String line = null;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader reader = request.getReader();</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((line = reader.readLine()) != null) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml.append(line);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Error reading XML: " + e.toString());</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return xml.toString();</p>
            <p>&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doPost(request, response);</p>
            <p>&nbsp;&nbsp;&nbsp; }</p>
            <p>}</p>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">运行，显示如下：<br />
<img height="509" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/Ajax12.JPG" width="743" border="0" /><br />
<br />
<br />
</p>
<hr />
<p style="margin-left: 21pt; text-indent: -21pt"> <br />
作者：周大庆（zhoudaqing） <br />
网址：<strong><font color="#ff0000">http://www.blogjava.net/yifeng</font></strong><br />
&gt;&gt;&gt;<span style="color: red"><strong>转载请注明出处！</strong></span>&lt;&lt;&lt; </span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
    </tbody>
</table>
<img src ="http://www.blogjava.net/yifeng/aggbug/224345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2008-08-26 02:47 <a href="http://www.blogjava.net/yifeng/archive/2008/08/26/224345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX基础与实践(四) </title><link>http://www.blogjava.net/yifeng/archive/2008/08/26/224344.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Mon, 25 Aug 2008 18:42:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2008/08/26/224344.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/224344.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2008/08/26/224344.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/224344.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/224344.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;responseXML　将响应解析为XML&#216;&nbsp;浏览器把XML　看作是遵循W3C　DOM　的XML文档。&#216;&nbsp;W3C　DOM　指定了一组很丰富的API　，可用于搜索和处理XML　文挡。W3C　DOM&#216;&nbsp;W3C　提供的定义：文档对象模型(DOM)　是与平台和语言无关的接口，允许程序和脚本动态地...&nbsp;&nbsp;<a href='http://www.blogjava.net/yifeng/archive/2008/08/26/224344.html'>阅读全文</a><img src ="http://www.blogjava.net/yifeng/aggbug/224344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2008-08-26 02:42 <a href="http://www.blogjava.net/yifeng/archive/2008/08/26/224344.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX基础与实践(三)</title><link>http://www.blogjava.net/yifeng/archive/2008/08/26/224342.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Mon, 25 Aug 2008 18:39:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2008/08/26/224342.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/224342.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2008/08/26/224342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/224342.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/224342.html</trackback:ping><description><![CDATA[&nbsp;
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt; font-family: 宋体">创建</span><span style="font-size: 14pt">XHR</span><span style="font-size: 14pt; font-family: 宋体">发送请求</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">如下：</span></p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: black 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1pt solid; width: 426.1pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="568">
            <p>&lt;script<span style="font-family: 宋体">　</span>type="text/javascript"&gt; </p>
            <p>var<span style="font-family: 宋体">　</span>xmlHttp; </p>
            <p>//<span style="font-family: 宋体">创建一个</span>XMLHttpRequest<span style="font-family: 宋体">对象　</span></p>
            <p>function<span style="font-family: 宋体">　</span>createXMLHttpRequest()<span style="font-family: 宋体">　</span>{ </p>
            <p>//<span style="font-family: 宋体">　</span>For<span style="font-family: 宋体">　</span>Internet<span style="font-family: 宋体">　</span>Explorer<span style="font-family: 宋体">　</span>5.5,<span style="font-family: 宋体">　</span>6,<span style="font-family: 宋体">　</span>7<span style="font-family: 宋体">　</span> </p>
            <p><span style="font-family: 宋体">　　　　</span>if<span style="font-family: 宋体">　</span>(window.ActiveXObject)<span style="font-family: 宋体">　</span>{ </p>
            <p><span style="font-family: 宋体">　　　　　　　　</span>xmlHttp<span style="font-family: 宋体">　</span>=<span style="font-family: 宋体">　</span>new<span style="font-family: 宋体">　</span>ActiveXObject("Microsoft.XMLHTTP"); </p>
            <p><span style="font-family: 宋体">　　　　</span>}<span style="font-family: 宋体">　</span></p>
            <p>//<span style="font-family: 宋体">　</span>For<span style="font-family: 宋体">　</span>Mozilla,<span style="font-family: 宋体">　</span>Firefox,<span style="font-family: 宋体">　</span>Safari,<span style="font-family: 宋体">　</span>Netscape </p>
            <p><span style="font-family: 宋体">　　　　</span>else<span style="font-family: 宋体">　</span>if<span style="font-family: 宋体">　</span>(window.XMLHttpRequest)<span style="font-family: 宋体">　</span>{ </p>
            <p><span style="font-family: 宋体">　　　　　　　　</span>xmlHttp<span style="font-family: 宋体">　</span>=<span style="font-family: 宋体">　</span>new<span style="font-family: 宋体">　</span>XMLHttpRequest(); </p>
            <p><span style="font-family: 宋体">　　　　</span>} </p>
            <p>}<span style="font-family: 宋体">　　</span></p>
            <p>&lt;/script&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">AJAX</span><span style="font-size: 14pt; font-family: 宋体">发送请求</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">如下：</span></p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: black 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1pt solid; width: 426.1pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="568">
            <p>function<span style="font-family: 宋体">　</span>startRequest()<span style="font-family: 宋体">　</span>{ </p>
            <p><span style="font-family: 宋体">　　　　</span>createXMLHttpRequest(); </p>
            <p>//<span style="font-family: 宋体">注册回调事件处理器　</span></p>
            <p><span style="font-family: 宋体">　　　　</span>xmlHttp.onreadystatechange<span style="font-family: 宋体">　</span>=<span style="font-family: 宋体">　</span>handleStateChange; </p>
            <p>//<span style="font-family: 宋体">使用</span>Open()<span style="font-family: 宋体">方法初始化</span>XMLHttpRequest<span style="font-family: 宋体">对象</span>-<span style="font-family: 宋体">指定</span>HTTP<span style="font-family: 宋体">方法</span></p>
            <p>//<span style="font-family: 宋体">和要使用的服务器</span>URL<span style="font-family: 宋体">　</span></p>
            <p><span style="font-family: 宋体">　　　　</span>xmlHttp.open("GET",<span style="font-family: 宋体">　</span>"innerHTML.xml",<span style="font-family: 宋体">　</span>true); </p>
            <p>//send()<span style="font-family: 宋体">方法发送该请求　</span></p>
            <p><span style="font-family: 宋体">　　　　</span>xmlHttp.send(null); </p>
            <p>}</p>
            </td>
        </tr>
    </tbody>
</table>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt; font-family: 宋体">应用</span><span style="font-size: 14pt">GET</span><span style="font-size: 14pt; font-family: 宋体">　</span><span style="font-size: 14pt">POST</span><span style="font-size: 14pt; font-family: 宋体">发送请求</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">方法如下：</span></p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: black 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1pt solid; padding-top: 0cm; border-bottom: black 1pt solid" valign="top">
            <p><span style="font-family: 宋体">方法名</span></p>
            </td>
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: black 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: black 1pt solid" valign="top">
            <p><span style="font-family: 宋体">描述</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1pt solid; padding-top: 0cm; border-bottom: black 1pt solid" valign="top">
            <p>getElementById(id) (document)</p>
            </td>
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: black 1pt solid" valign="top">
            <p><span style="font-family: 宋体">获取有指定唯一</span>ID<span style="font-family: 宋体">属性值文档中的元素</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1pt solid; padding-top: 0cm; border-bottom: black 1pt solid" valign="top">
            <p>getElementsByTagName(name)</p>
            </td>
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: black 1pt solid" valign="top">
            <p><span style="font-family: 宋体">返回当前元素中有指定标记名的子元素的数组</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1pt solid; padding-top: 0cm; border-bottom: black 1pt solid" valign="top">
            <p>hasChildNodes()</p>
            </td>
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: black 1pt solid" valign="top">
            <p><span style="font-family: 宋体">返回一个布尔值，指示元素是否有子元素</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1pt solid; padding-top: 0cm; border-bottom: black 1pt solid" valign="top">
            <p>getAttribute(name)</p>
            </td>
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: black 1pt solid" valign="top">
            <p><span style="font-family: 宋体">返回元素的属性值，属性由</span>name<span style="font-family: 宋体">指定</span></p>
            </td>
        </tr>
    </tbody>
</table>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt; font-family: 宋体">处理服务器晌应</span></p>
</div>
<p>XMLHttpRequest<span style="font-family: 宋体">　提供了两个可以用来访问服务器响应的属性</span>.</p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>responseText<span style="font-family: 宋体">　：将响应提供为一个串。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>responseXML<span style="font-family: 宋体">：将响应提供为一个</span>XML<span style="font-family: 宋体">　对象。</span></p>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt; font-family: 宋体">使用</span><span style="font-size: 14pt">innerHTML</span><span style="font-size: 14pt; font-family: 宋体">　属性创建动态内容</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>responseText<span style="font-family: 宋体">　＋　</span>innerHtml<span style="font-family: 宋体">，</span></p>
<p style="margin-left: 21pt"><span style="font-family: 宋体">服务器　</span>"<span style="font-family: 宋体">生产</span>"<span style="font-family: 宋体">或生成</span>HTML<span style="font-family: 宋体">　内容，</span></p>
<p style="margin-left: 21pt"><span style="font-family: 宋体">浏览器使用　</span>innerHTML<span style="font-family: 宋体">来</span>"<span style="font-family: 宋体">消费</span>"<span style="font-family: 宋体">或处理。</span></p>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">DEMO</span><span style="font-size: 14pt; font-family: 宋体">　</span><span style="font-size: 14pt">responseText</span><span style="font-size: 14pt; font-family: 宋体">　＋　</span><span style="font-size: 14pt">innerHtml</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>innerHTM.html</p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: black 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1pt solid; width: 426.1pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="568">
            <p>&lt;!DOCTYPE<span style="font-family: 宋体">　</span>html<span style="font-family: 宋体">　</span>PUBLIC<span style="font-family: 宋体">　</span>"-//W3C//DTD<span style="font-family: 宋体">　</span>XHTML<span style="font-family: 宋体">　</span>1.0<span style="font-family: 宋体">　</span>Strict//EN" </p>
            <p><span style="font-family: 宋体">　　</span>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;</p>
            <p>&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;head&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;Using responseText with innerHTML&lt;/title&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;META http-equiv=Content-Type content="text/html; charset=GBK"&gt;</p>
            <p>&lt;script <span style="font-family: 宋体">　</span>type="text/javascript"&gt; </p>
            <p>var<span style="font-family: 宋体">　</span>xmlHttp; </p>
            <p>function<span style="font-family: 宋体">　</span>createXMLHttpRequest()<span style="font-family: 宋体">　</span>{ </p>
            <p><span style="font-family: 宋体">　　　　</span>if<span style="font-family: 宋体">　</span>(window.ActiveXObject)<span style="font-family: 宋体">　</span>{ </p>
            <p><span style="font-family: 宋体">　　　　　　　　</span>xmlHttp<span style="font-family: 宋体">　</span>=<span style="font-family: 宋体">　</span>new<span style="font-family: 宋体">　</span>ActiveXObject("Microsoft.XMLHTTP"); </p>
            <p><span style="font-family: 宋体">　　　　</span>}<span style="font-family: 宋体">　</span></p>
            <p><span style="font-family: 宋体">　　　　</span>else<span style="font-family: 宋体">　</span>if<span style="font-family: 宋体">　</span>(window.XMLHttpRequest)<span style="font-family: 宋体">　</span>{ </p>
            <p><span style="font-family: 宋体">　　　　　　　　</span>xmlHttp<span style="font-family: 宋体">　</span>=<span style="font-family: 宋体">　</span>new<span style="font-family: 宋体">　</span>XMLHttpRequest(); </p>
            <p><span style="font-family: 宋体">　　　　</span>} </p>
            <p>}<span style="font-family: 宋体">　　</span></p>
            <p>function<span style="font-family: 宋体">　</span>startRequest()<span style="font-family: 宋体">　</span>{ </p>
            <p><span style="font-family: 宋体">　　　　</span>createXMLHttpRequest(); </p>
            <p><span style="font-family: 宋体">　　　　</span>xmlHttp.onreadystatechange<span style="font-family: 宋体">　</span>=<span style="font-family: 宋体">　</span>handleStateChange; </p>
            <p><span style="font-family: 宋体">　　　　</span>xmlHttp.open("GET",<span style="font-family: 宋体">　</span>"innerHTML.txt",<span style="font-family: 宋体">　</span>true); </p>
            <p><span style="font-family: 宋体">　　　　</span>xmlHttp.send(null); </p>
            <p>} </p>
            <p>function<span style="font-family: 宋体">　</span>handleStateChange()<span style="font-family: 宋体">　</span>{ </p>
            <p><span style="font-family: 宋体">　　　　</span>if(xmlHttp.readyState<span style="font-family: 宋体">　</span>==<span style="font-family: 宋体">　</span>4)<span style="font-family: 宋体">　</span>{ </p>
            <p><span style="font-family: 宋体">　　　　　　　　</span>if(xmlHttp.status<span style="font-family: 宋体">　</span>==<span style="font-family: 宋体">　</span>200)<span style="font-family: 宋体">　</span>{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
            <p><span style="font-family: 宋体">　　　　　　　　　　　　</span>document.getElementById("results").innerHTML<span style="font-family: 宋体">　</span>=<span style="font-family: 宋体">　</span>xmlHttp.responseText; </p>
            <p><span style="font-family: 宋体">　　　　　　　　</span>} </p>
            <p><span style="font-family: 宋体">　　　　</span>} </p>
            <p>} </p>
            <p>&lt;/script&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/head&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;body&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form <span style="font-family: 宋体">　</span>action="#"&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; please content:&lt;input <span style="font-family: 宋体">　</span>type="button" <span style="font-family: 宋体">　</span>value="Search<span style="font-family: 宋体">　</span>for<span style="font-family: 宋体">　</span>Today<span style="font-family: 宋体">&#8217;</span>s<span style="font-family: 宋体">　</span>Activities" onclick="startRequest();" /&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;span id="results"&gt;&lt;/span&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/body&gt;</p>
            <p>&lt;/html&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>innerHTML.txt</p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: black 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1pt solid; width: 426.1pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="568">
            <p><span style="font-family: 宋体">请输入内容！！！</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">输出结果：</span></p>
<table style="border-right: medium none; border-top: medium none; margin-left: 21pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
    </tbody>
</table>
<img height="516" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/Ajax08.JPG" width="734" border="0" /><br />
<br />
<br />
<br />
<hr />
<br />
作者：周大庆（zhoudaqing） <br />
网址：<strong><font color="#ff0000">http://www.blogjava.net/yifeng</font></strong><br />
&gt;&gt;&gt;<span style="color: red"><strong>转载请注明出处！</strong></span>&lt;&lt;&lt; 
<img src ="http://www.blogjava.net/yifeng/aggbug/224342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2008-08-26 02:39 <a href="http://www.blogjava.net/yifeng/archive/2008/08/26/224342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX基础与实践(二)</title><link>http://www.blogjava.net/yifeng/archive/2008/08/26/224341.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Mon, 25 Aug 2008 18:31:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2008/08/26/224341.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/224341.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2008/08/26/224341.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/224341.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/224341.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;XMLHttpRequest(XHR)&#216;&nbsp;浏览器可以直接从JavaScript中初始化请求并获取结果。&#216;&nbsp;本质上是添加了额外的用于发送和接收XML代码功能的普通HTTP请求。&#216;&nbsp;像一个　ServletRequestXMLHttpRequest对象的属性和事件&#216;&nbsp;XML...&nbsp;&nbsp;<a href='http://www.blogjava.net/yifeng/archive/2008/08/26/224341.html'>阅读全文</a><img src ="http://www.blogjava.net/yifeng/aggbug/224341.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2008-08-26 02:31 <a href="http://www.blogjava.net/yifeng/archive/2008/08/26/224341.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX基础与实践(一)</title><link>http://www.blogjava.net/yifeng/archive/2008/08/26/224340.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Mon, 25 Aug 2008 18:29:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2008/08/26/224340.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/224340.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2008/08/26/224340.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/224340.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/224340.html</trackback:ping><description><![CDATA[&nbsp;
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">AJAX</span><span style="font-size: 14pt; font-family: 宋体">历史</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>2005<span style="font-family: 宋体">年</span>2<span style="font-family: 宋体">月</span>,<span style="font-family: 宋体">　</span>Adaptive<span style="font-family: 宋体">　</span>Path<span style="font-family: 宋体">　的</span>Jesse<span style="font-family: 宋体">　</span>James<span style="font-family: 宋体">　</span>Garrett<span style="font-family: 宋体">　最早创造了这个词。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>Ajax:A<span style="font-family: 宋体">　</span>New<span style="font-family: 宋体">　</span>Approach<span style="font-family: 宋体">　</span>to<span style="font-family: 宋体">　</span>Web<span style="font-family: 宋体">　</span>Applications<span style="font-family: 宋体">　</span>(Ajax:<span style="font-family: 宋体">　</span>Web<span style="font-family: 宋体">　应用的一种新方法</span>)<span style="font-family: 宋体">中，</span>Garrett<span style="font-family: 宋体">讨论了</span> <span style="font-family: 宋体">如何消除胖客户</span>(<span style="font-family: 宋体">或桌面</span>)<span style="font-family: 宋体">应用与瘦客户</span>(<span style="font-family: 宋体">或</span>Web)<span style="font-family: 宋体">　应用之间的界限</span>.</p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">以前认为是　</span>"Asynchronous<span style="font-family: 宋体">　</span>JavaScript<span style="font-family: 宋体">　</span>+<span style="font-family: 宋体">　</span>XML"<span style="font-family: 宋体">　的缩写</span>.</p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span><span style="font-family: 宋体">目前认为是</span>:<span style="font-family: 宋体">允许浏览器与服务器通信而无需刷新当前页面的技术</span>.</p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>Famous<span style="font-family: 宋体">　</span>examples<span style="font-family: 宋体">　</span>:<span style="font-family: 宋体">　</span>Google<span style="font-family: 宋体">　</span>Maps<span style="font-family: 宋体">　</span>,<span style="font-family: 宋体">　</span>Google<span style="font-family: 宋体">　</span>Suggest<span style="font-family: 宋体">　</span>,<span style="font-family: 宋体">　</span>GMail<span style="font-family: 宋体">　</span>,Outlook<span style="font-family: 宋体">　</span>Web<span style="font-family: 宋体">　</span>Access</p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>New<span style="font-family: 宋体">　</span>bottle<span style="font-family: 宋体">　</span>of<span style="font-family: 宋体">　</span>old<span style="font-family: 宋体">　</span>wine</p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>The<span style="font-family: 宋体">　</span>next<span style="font-family: 宋体">　</span>generation<span style="font-family: 宋体">　</span>browser<span style="font-family: 宋体">　</span>will<span style="font-family: 宋体">　</span>have<span style="font-family: 宋体">　</span>built-in<span style="font-family: 宋体">　</span>UI<span style="font-family: 宋体">　</span>Component(XUL<span style="font-family: 宋体">　</span>etc),IE7<span style="font-family: 宋体">中</span>XMLHttpRequest<span style="font-family: 宋体">实现为一个窗口对象属性</span>.</p>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt; font-family: 宋体">什么是</span><span style="font-size: 14pt">AJAX</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>AJAX<span style="font-family: 宋体">技术是</span>Asynchronous<span style="font-family: 宋体">　</span>JavaScript<span style="font-family: 宋体">　</span>XML(<span style="font-family: 宋体">异步</span>JavaScript<span style="font-family: 宋体">　和</span>XML)<span style="font-family: 宋体">的简称，</span>Ajax<span style="font-family: 宋体">提供与服务器异步通信的能力，一个无需刷新整个页面而在网页中更新一部分数据的应用。　</span></p>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">AJAX</span><span style="font-size: 14pt; font-family: 宋体">是一门新技术？</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>AJAX<span style="font-family: 宋体">不是一个新技术。它包含：</span></p>
<p style="margin-left: 42pt; text-indent: -21pt">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">基于标准的展示使用　　</span>XHTML<span style="font-family: 宋体">和</span>CSS;</p>
<p style="margin-left: 42pt; text-indent: -21pt">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">动态显示和交互使用　　文档对象模型</span>DOM;</p>
<p style="margin-left: 42pt; text-indent: -21pt">3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">数据交换和操纵使用　　</span>XML<span style="font-family: 宋体">和</span>XSLT<span style="font-family: 宋体">和</span>JSON;</p>
<p style="margin-left: 42pt; text-indent: -21pt">4.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">异步数据检索方法使用</span> XMLHttpRequest(XHR);</p>
<p style="margin-left: 42pt; text-indent: -21pt">5.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">粘胶剂使用</span> JavaScript<span style="font-family: 宋体">。</span></p>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-weight: normal; font-size: 14pt">Web</span><span style="font-weight: normal; font-size: 14pt; font-family: 宋体">　</span><span style="font-weight: normal; font-size: 14pt">1.0</span><span style="font-weight: normal; font-size: 14pt; font-family: 宋体">　</span><span style="font-weight: normal; font-size: 14pt">&amp;</span><span style="font-weight: normal; font-size: 14pt; font-family: 宋体">　</span><span style="font-weight: normal; font-size: 14pt">Web</span><span style="font-weight: normal; font-size: 14pt; font-family: 宋体">　</span><span style="font-weight: normal; font-size: 14pt">2.0</span></p>
</div>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>Web<span style="font-family: 宋体">　</span>1.0<span style="font-family: 宋体">　&#8211;　同步</span>(Synchronous)<br />
<img height="434" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/ajax01.JPG" width="256" border="0" /><br />
<img height="255" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/ajax02.JPG" width="470" border="0" /></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">&#216;&nbsp;</span>Web<span style="font-family: 宋体">　</span>2.0<span style="font-family: 宋体">　非同步</span>(Asynchronous) <br />
<img height="525" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/ajax03.JPG" width="264" border="0" /><br />
<img height="318" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/ajax04.JPG" width="466" border="0" /></p>
<div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 4pt; margin-left: 46.8pt; border-left: medium none; margin-right: 46.8pt; padding-top: 0cm; border-bottom: #4f81bd 1pt solid">
<p style="margin: 10pt 0cm 14pt"><span style="font-size: 14pt">AJAX</span><span style="font-size: 14pt; font-family: 宋体">原理图</span></p>
</div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img height="280" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/ajax05.JPG" width="670" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img height="630" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/Ajax/ajax06.JPG" width="670" border="0" />&nbsp;<br />
<font color="#ff0000"><strong>&nbsp;
<hr />
<br />
作者：周大庆（zhoudaqing） <br />
网址：<strong><font color="#ff0000">http://www.blogjava.net/yifeng</font></strong><br />
&gt;&gt;&gt;<span style="color: red"><strong>转载请注明出处！</strong></span>&lt;&lt;&lt; </strong></font>
<img src ="http://www.blogjava.net/yifeng/aggbug/224340.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2008-08-26 02:29 <a href="http://www.blogjava.net/yifeng/archive/2008/08/26/224340.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jQuery中文入门指南，翻译加实例，jQuery的起点教程</title><link>http://www.blogjava.net/yifeng/archive/2008/08/26/224337.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Mon, 25 Aug 2008 17:43:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2008/08/26/224337.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/224337.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2008/08/26/224337.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/224337.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/224337.html</trackback:ping><description><![CDATA[<h1>jQuery中文入门指南，翻译加实例，jQuery的起点教程</h1>
<div>
<h3>中文版译者：<a href="http://keelsike.blogspot.com/">Keel</a></h3>
<p>此文以实例为基础一步步说明了jQuery的工作方式。现以中文翻译（添加我的补充说明）如下。如有相关意见或建议请麻烦到我的 <a href="http://keelsike.blogspot.com/">BLOG</a> 写个回复或者 <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#107;&#101;&#101;&#108;&#46;&#115;&#105;&#107;&#101;&#37;&#50;&#56;&#97;&#116;&#37;&#50;&#57;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">EMAIL</a> 告知。</p>
<p>英文原版：<a href="http://jquery.bassistance.de/jquery-getting-started.html">http://jquery.bassistance.de/jquery-getting-started.html</a> ，感谢原文作者 <a href="http://bassistance.de/">J&#246;rn Zaefferer</a></p>
<p><strong>本文发布已征求原作者同意。</strong> </p>
<p>另外我认为在学习过程中,有两个API文档你要打开随时查看:</p>
<ul>
    <li><a href="http://jquery.com/api/">http://jquery.com/api/</a>
    <li><a href="http://visualjquery.com/">http://visualjquery.com/</a> </li>
</ul>
</div>
<h4>以下部分为原文翻译:</h4>
<hr />
<div>
<h2>jQuery入门指南教程</h2>
<p>这个指南是一个对jQuery库的说明，要求读者了解HTML(DOM)和CSS的一些常识。它包括了一个简单的Hello World的例子，选择器和事件基础，AJAX、FX的用法，以及如何制作jQuery的插件。 这个指南包括了很多代码，你可以copy它们，并试着修改它们，看看产生的效果。 </p>
<h2>内容提要</h2>
<ol>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#setup">安装</a>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#hello">Hello jQuery</a>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#find">Find me:使用选择器和事件</a>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#rate">Rate me:使用AJAX</a>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#">Animate me(让我生动起来):使用FX</a>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#sort">Sort me(将我有序化):使用tablesorter插件(表格排序)</a>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#plug">Plug me:制作您自己的插件</a>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#next">Next steps(下一步)</a> </li>
</ol>
</div>
<div>
<h2 id="setup">安装</h2>
<p>一开始,我们需要一个jQuery的库,最新的下载可以到<a href="http://jquery.com/src/">这里</a>找到。这个指南提供一个基本包含实例的包供下载.</p>
<p>下载：<a class="download" href="http://www.k99k.com/jquery-starterkit.zip">jQuery Starterkit</a></p>
<p class="log">(译者Keel注:一定要下载这个包，光看文章不实践肯定是不行的。) </p>
<p class="instruction">下载后解压缩，然后用你最喜欢的文本编辑器打开starterkit.html和custom.js这两个文件。<span class="log">(译者Keel注:这两个就是例子文件,所有的例子都用这两个例子作出,custom.js写jQuery代码,starterkit.html观察效果.建议用editPlus打开) </span></p>
<p>现在,我们就已经做好了一切准备来进行这个著名的"Hello world"例子.</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://www.k99k.com/jquery-starterkit.zip">Starterkit</a>
    <li><a href="http://jquery.com/src/">jQuery Downloads</a> </li>
</ul>
</div>
<div>
<h2 id="hello">Hello jQuery</h2>
<p>在做所有事情之前,我们要让jQuery读取和处理文档的DOM,必须尽可能快地在DOM载入后开始执行事件,所以,我们用一个ready事件作为处理HTML文档的开始.看看我们打开的custom.js这个文件,里面已经准备好了:</p>
<pre>$(document).ready(function() {<br />
// do stuff when DOM is ready<br />
});</pre>
<p>放一个简单的alert事件在需要等DOM完成载入,所以我们把任务稍稍变复杂一点:在点击任何一个链接时显示一个alert.</p>
<pre>$(document).ready(function() {<br />
$("a").click(function() {<br />
alert("Hello world!");<br />
});<br />
});</pre>
<p>这样在你点击页面的一个链接时都会触发这个"Hello world"的提示。</p>
<p class="log">(译者Keel注:请照此代码修改custom.js并保存,然后用浏览器打开starterkit.html观察效果。)</p>
<p>让我们看一下这些修改是什么含义。$("a") 是一个jQuery选择器(selector),在这里，它选择所有的a标签<span class="log">（译者Keel注：即&lt;a&gt;&lt;/a&gt;）</span>，$ 号是 jQuery &#8220;类&#8221;(jQuery "class")的一个别称，因此$()构造了一个新的jQuery 对象(jQuery object)。函数 click() 是这个jQuery对象的一个方法，它绑定了一个单击事件到所有选中的标签(这里是所有的a标签),并在事件触发时执行了它所提供的alert方法.</p>
<p>这里有一个拟行相似功能的代码:</p>
<pre>&lt;a href="#" onclick="alert('Hello world')"&gt;Link&lt;/a&gt;</pre>
<p>不同之处很明显,用jQuery不需要在每个a标签上写onclick事件,所以我们拥有了一个整洁的结构文档(HTML)和一个行为文档(JS),达到了将结构与行为分开的目的,就像我们使用CSS追求的一样.</p>
<p>下面我们会更多地了解到选择器与事件.</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://jquery.com/docs/Base/">jQuery Base</a>
    <li><a href="http://jquery.com/docs/Base/Expression/">jQuery Expressions</a>
    <li><a href="http://jquery.com/docs/Base/Events/">jQuery Basic Events</a> </li>
</ul>
</div>
<div>
<h2 id="find">Find me:使用选择器和事件</h2>
<p>jQuery提供两种方式来选择html的 elements，第一种是用CSS和Xpath选择器联合起来形成一个字符串来传送到jQuery的构造器（如：$("div &gt; ul a")）；第二种是用jQuery对象的几个methods(方法)。这两种方式还可以联合起来混合使用。</p>
<p>为了测试一下这些选择器，我们来试着在我们starterkit.html中选择并修改第一个ordered list.</p>
<p>一开始，我们需要选择这个list本身，这个list有一个ID叫&#8220;orderedlist&#8221;，通常的javascript写法是document.getElementById("orderedlist").在jQuery中，我们这样做：</p>
<pre>$(document).ready(function() {<br />
$("#orderedlist").addClass("red");<br />
});</pre>
<p>这里将starterkit中的一个CSS样式red附加到了orderedlist上<span class="log">(译者Keel注：参考测试包中的css目录下的core.css，其中定义了red样式)</span>。因此，在你刷新了starterkit.html后，你将会看到第一个有序列表(ordered list )背景色变成了红色，而第二个有序列表没有变化.</p>
<p>现在，让我们添加一些新的样式到list的子节点.</p>
<pre>$(document).ready(function() {<br />
$("#orderedlist &gt; li").addClass("blue");<br />
});</pre>
<p>这样，所有orderedlist中的li都附加了样式"blue"。</p>
<p>现在我们再做个复杂一点的，当把鼠标放在li对象上面和移开时进行样式切换，但只在list的最后一个element上生效。</p>
<pre>$(document).ready(function() {<br />
$("#orderedlist li:last").hover(function() {<br />
$(this).addClass("green");<br />
}, function() {<br />
$(this).removeClass("green");<br />
});<br />
});</pre>
<p>还有大量的类似的<a class="doc" title="Documentation for CSS selectors" href="http://jquery.com/docs/Base/Expression/CSS/">CSS</a>和<a class="doc" title="Documentation for XPath selectors" href="http://jquery.com/docs/Base/Expression/XPath/">XPath</a>例子，更多的例子和列表可以在<a class="doc" title="Documentation for base selectors" href="http://jquery.com/docs/Base/Expression/">这里</a>找到。<span class="log">（译者Keel注：入门看此文，修行在个人，要想在入门之后懂更多，所以这段话的几个链接迟早是要必看的！不会又要翻译吧...^_^!）</span></p>
<p>每一个onXXX事件都有效，如onclick,onchange,onsubmit等，都有jQuery等价表示方法<span class="log">（译者Keel注：jQuery不喜欢onXXX，所以都改成了XXX，去掉了on）</span>。<a class="doc" title="Documentation for advanced events" href="http://jquery.com/docs/EventModule/">其他的一些事件</a>，如ready和hover,也提供了相应的方法。</p>
<p>你可以在<a href="http://visualjquery.com/">Visual jQuery</a>找到全部的事件列表，在Events栏目下.</p>
<p>用这些选择器和事件你已经可以做很多的事情了，但这里有一个更强的好东东！</p>
<pre>$(document).ready(function() {<br />
$("#orderedlist").find("li").each(function(i) {<br />
$(this).html( $(this).html() + " BAM! " + i );<br />
});<br />
});</pre>
<p>find() 让你在已经选择的element中作条件查找,因此 $("#orderedlist).find("li") 就像 $("#orderedlist li"). each()一样迭代了所有的li，并可以在此基础上作更多的处理。 大部分的方法,如addClass(), 都可以用它们自己的 each() 。在这个例子中, html()用来获取每个li的html文本, 追加一些文字，并将之设置为li的html文本。<span class="log">（译者Keel注：从这个例子可以看到.html()方法是获取对象的html代码，而.html('xxx')是设置'xxx'为对象的html代码）</span></p>
<p>另一个经常碰到的任务是在没有被jQuery覆盖的DOM元素上call一些方法，想像一个在你用AJAX方式成功提交后的reset：</p>
<pre>$(document).ready(function() {<br />
// use this to reset a single form<br />
$("#reset").click(function() {<br />
$("#form")[0].reset();<br />
});<br />
});</pre>
<p class="log">（译者Keel注：这里作者将form的id也写成了form，源文件有&lt;form id="form"&gt;，这是非常不好的写法，你可以将这个ID改成form1或者testForm，然后用$("#form1")或者$ ("#testForm")来表示它，再进行测试。）</p>
<p>这个代码选择了所有ID为"form"的元素，并在其第一个上call了一个reset()。如果你有一个以上的form，你可以这样做：</p>
<pre>$(document).ready(function() {<br />
// use this to reset several forms at once<br />
$("#reset").click(function() {<br />
$("form").each(function() {<br />
this.reset();<br />
});<br />
});<br />
});</pre>
<p class="log">（译者Keel注：请注意一定要亲自将这些代码写在custom.js中并在starterkit.html上测试效果才能有所体会！必要时要观察starterkit.html的html代码）</p>
<p>这样你在点击Reset链接后，就选择了文档中所有的form元素，并对它们都执行了一次reset()。</p>
<p>还 有一个你可能要面对的问题是不希望某些特定的元素被选择。jQuery 提供了filter() 和not() 方法来解决这个问题。 filter()以过滤表达式来减少不符合的被选择项, not()则用来取消所有符合过滤表达式的被选择项. 考虑一个无序的list，你想要选择所有的没有ul子元素的li元素。</p>
<pre>$(document).ready(function() {<br />
$("li").not("[ul]").css("border", "1px solid black");<br />
});</pre>
<p>这个代码选择了所有的li元素，然后去除了没有ul子元素的li元素。刷新浏览器后，所有的li元素都有了一个边框，只有ul子元素的那个li元素例外。</p>
<p class="log">（译 者Keel注：请注意体会方便之极的css()方法，并再次提醒请务必实际测试观察效果，比方说换个CSS样式呢？再加一个CSS样式呢？像这样：$ ("li").not("[ul]").css("border", "1px solid black").css("color","red");）</p>
<p>上面代码中的[expression] 语法是从XPath而来，可以在子元素和属性(elements and attributes)上用作过滤器，比如你可能想选择所有的带有name属性的链接:</p>
<pre>$(document).ready(function() {<br />
$("a[@name]").background("#eee");<br />
});</pre>
<p>这个代码给所有带有name属性的链接加了一个背景色。<span class="log">（译者Keel注：这个颜色太不明显了，建议写成$("a[@name]").background("red");）</span></p>
<p>更常见的情况是以name来选择链接，你可能需要选择一个有特点href属性的链接，这在不同的浏览器下对href的理解可能会不一致，所以我们的部分匹配("*=")的方式来代替完全匹配("=")：</p>
<pre>$(document).ready(function() {<br />
$("a[@href*=/content/gallery]").click(function() {<br />
// do something with all links that point somewhere to /content/gallery<br />
});<br />
});</pre>
<p>到现在为止，选择器都用来选择子元素或者是过滤元素。另外还有一种情况是选择上一个或者下一个元素，比如一个FAQ的页面，答案首先会隐藏，当问题点击时，答案显示出来，jQuery代码如下：</p>
<pre>$(document).ready(function() {<br />
$('#faq').find('dd').hide().end().find('dt').click(function() {<br />
var answer = $(this).next();<br />
if (answer.is(':visible')) {<br />
answer.slideUp();<br />
} else {<br />
answer.slideDown();<br />
}<br />
});<br />
});</pre>
<p>这 里我们用了一些链式表达法来减少代码量，而且看上去更直观更容易理解。像'#faq' 只选择了一次，利用end()方法，第一次find()方法会结束(undone)，所以我们可以接着在后面继续find('dt')，而不需要再写$ ('#faq').find('dt')。</p>
<p>在点击事件中的，我们用 $(this).next() 来找到dt下面紧接的一个dd元素，这让我们可以快速地选择在被点击问题下面的答案。</p>
<p class="log">（译 者Keel注：这个例子真是太酷了，FAQ中的答案可以收缩！从利用next()的思路到实现这些效果都有很多地方需要我们消化，注意 if (answer.is(':visible'))用法，注意answer.slideUp();不懂的地方赶紧查我在最开始提到的两个必看API文档）</p>
<p>除了选择同级别的元素外，你也可以选择父级的元素。可能你想在用户鼠标移到文章某段的某个链接时，它的父级元素--也就是文章的这一段突出显示，试试这个：</p>
<pre>$(document).ready(function() {<br />
$("a").hover(function() {<br />
$(this).parents("p").addClass("highlight");<br />
}, function() {<br />
$(this).parents("p").removeClass("highlight");<br />
});<br />
});</pre>
<p>测试效果可以看到，移到文章某段的链接时，它所在的段全用上highlight样式，移走之后又恢复原样。</p>
<span class="log">（译者Keel注：highlight是core.css中定义的样式，你也可以改变它，注意这里有第二个function()这是hover方法的特点，请在API文档中查阅hover，上面也有例子说明）</span>
<p>在我们继续之前我们先来看看这一步： jQuery会让代码变得更短从而更容易理解和维护，下面是$(document).ready(callback)的缩写法：</p>
<pre>$(function() {<br />
// code to execute when the DOM is ready<br />
});</pre>
<p>应用到我们的Hello world例子中，可以这样:</p>
<pre>$(function() {<br />
$("a").click(function() {<br />
alert("Hello world!");<br />
});<br />
});</pre>
<p>现在，我们手上有了这些基础的知识，我们可以更进一步的探索其它方面的东西，就从AJAX开始！</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://jquery.com/api/">jQuery API documentation</a>
    <li><a href="http://visualjquery.com/">Visual jQuery - A categorized browsable API documentation</a>
    <li><a href="http://jquery.com/docs/Base/Expression/CSS/">jQuery Expressions: CSS</a>
    <li><a href="http://jquery.com/docs/Base/Expression/XPath/">jQuery Expressions: XPath</a>
    <li><a href="http://jquery.com/docs/Base/Expression/Custom/">jQuery Expressions: Custom</a>
    <li><a href="http://jquery.com/docs/EventModule/">jQuery Special Events</a>
    <li><a href="http://jquery.com/docs/Base/Traverse/">jQuery DOM Traversing</a> </li>
</ul>
</div>
<div>
<h2 id="rate">Rate me:使用AJAX</h2>
<p>在这一部分我们写了一个小小的AJAX应用，它能够rate一些东西<span class="log">（译Keel注：就是对某些东西投票）</span>，就像在youtube.com上面看到的一样。</p>
<p>首先我们需要一些服务器端代码，这个例子中用到了一个PHP文件，读取rating参数然后返回rating总数和平均数。看一下<a href="http://www.k99k.com/rate.phps">rate.php</a>代码.</p>
<p>虽然这些例子也可以不使用AJAX来实现，但显示我们不会那么做，我们用jQuery生成一个DIV容器，ID是"rating".</p>
<pre>$(document).ready(function() {<br />
// generate markup<br />
var ratingMarkup = ["Please rate: "];<br />
for(var i=1; i &lt;= 5; i++) {<br />
ratingMarkup[ratingMarkup.length] = "&lt;a href='#'&gt;" + i + "&lt;/a&gt;&nbsp;";<br />
}<br />
// add markup to container and applier click handlers to anchors<br />
$("#rating").append( ratingMarkup.join('') ).find("a").click(function(e) {<br />
e.preventDefault();<br />
// send requests<br />
$.post("rate.php", {rating: $(this).html()}, function(xml) {<br />
// format result<br />
var result = [<br />
"Thanks for rating, current average: ",<br />
$("average", xml).text(),<br />
", number of votes: ",<br />
$("count", xml).text()<br />
];<br />
// output result<br />
$("#rating").html(result.join(''));<br />
} );<br />
});<br />
});</pre>
<p>这段代码生成了5个链接，并将它们追加到id为"rating"容器中，当其中一个链接被点击时，该链接标明的分数就会以rating参数形式发送到rate.php，然后，结果将以XML形式会从服务器端传回来，添加到容器中，替代这些链接。</p>
<p>如果你没有一个安装过PHP的webserver，你可以看看这个<a href="http://www.k99k.com/example-rateme.html">在线的例子</a>.</p>
<p>不使用javascript实现的例子可以访问 <a href="http://www.softonic.de/ie/51494">softonic.de</a> 点击 "Kurz bewerten!"</p>
<p>更多的AJAX方法可以从<a class="doc" title="Documentation for AJAX methods" href="http://jquery.com/docs/AJAXModule/">这里</a> 找到，或者看看<a href="http://visualjquery.com/">API文档</a> 下面的AJAX filed under AJAX.</p>
<p class="log">（译者Keel注：这个在线实例从国内访问还是比较慢的，点击后要等一会儿才能看到结果，可以考虑对它进行修改，比如加上loading，投票后加上再投票的返回链接等。此外，这个例子中还是有很多需要进一步消化的地方，看不懂的地方请参考API文档。）</p>
<p>一个在使用AJAX载入内容时经常发生的问题是：当载入一个事件句柄到一个HTML文档时，还需要在载入内容上应用这些事件，你不得不在内容加载完成后应用这些事件句柄，为了防止代码重复执行，你可能用到如下一个function:</p>
<pre>// lets use the shortcut<br />
$(function() {<br />
var addClickHandlers = function() {<br />
$("a.clickMeToLoadContent").click(function() {<br />
$("#target").load(this.href, addClickHandlers);<br />
});<br />
};<br />
addClickHandlers();<br />
});</pre>
<p>现在，addClickHandlers只在DOM载入完成后执行一次，这是在用户每次点击具有clickMeToLoadContent 这个样式的链接并且内容加载完成后.</p>
<p>请注意addClickHandlers函数是作为一个局部变量定义的，而不是全局变量(如：function addClickHandlers() {...})，这样做是为了防止与其他的全局变量或者函数相冲突.</p>
<p>另一个常见的问题是关于回调(callback)的参数。你可以通过一个额外的参数指定回调的方法，简单的办法是将这个回调方法包含在一个其它的function中:</p>
<pre>// get some data<br />
var foobar = ...;<br />
// specify handler, it needs data as a paramter<br />
var handler = function(data) {<br />
...<br />
};<br />
// add click handler and pass foobar!<br />
$('a').click( function(event) { handler(foobar); } );<br />
<br />
// if you need the context of the original handler, use apply:<br />
$('a').click( function(event) { handler.apply(this, [foobar]); } );</pre>
<p>用到简单的AJAX后，我们可以认为已经非常之&#8220;web2.0&#8221;了，但是到现在为止，我们还缺少一些酷炫的效果。下一节将会谈到这些效果.</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://jquery.com/docs/AJAXModule/">jQuery AJAX Module</a>
    <li><a href="http://jquery.com/api/">jQuery API: Contains description and examples for append and all other jQuery methods</a>
    <li><a href="http://jquery.com/demo/thickbox/">ThickBox: A jQuery plugin that uses jQuery to enhance the famous lightbox</a> </li>
</ul>
</div>
<div>
<h2 id="animate">Animate me(让我生动起来):使用FX</h2>
<p>一些动态的效果可以使用 <code>show()</code> 和 <code>hide()</code>来表现:</p>
<pre>$(document).ready(function() {<br />
$("a").toggle(function() {<br />
$(".stuff").hide('slow');<br />
}, function() {<br />
$(".stuff").show('fast');<br />
});<br />
});</pre>
<p>你可以与 <code>animate()</code>联合起来创建一些效果,如一个带渐显的滑动效果:</p>
<pre>$(document).ready(function() {<br />
$("a").toggle(function() {<br />
$(".stuff").animate({<br />
height: 'hide',<br />
opacity: 'hide'<br />
}, 'slow');<br />
}, function() {<br />
$(".stuff").animate({<br />
height: 'show',<br />
opacity: 'show'<br />
}, 'slow');<br />
});<br />
});</pre>
<p>很多不错的效果可以访问<a href="http://interface.eyecon.ro/">interface plugin collection</a>. 这个站点提供了很多demos和文档</p>
<p>这些效果插件是位于jQuery插件列表的前面的，当然也有很多其他的插件，比如我们下一章讲到的表格排序插件。</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://jquery.com/docs/FxModule/">jQuery FX Module</a>
    <li><a href="http://interface.eyecon.ro/">Interface plugin</a> </li>
</ul>
</div>
<div>
<h2 id="sort">Sort me(将我有序化):使用tablesorter插件(表格排序)</h2>
<p>这个表格排序插件能让我们在客户端按某一列进行排序，引入jQuery和这个插件的js文件，然后告诉插件你想要哪个表格拥有排序功能。</p>
<p>要测试这个例子，先在starterkit.html中加上像下面这一行的代码：</p>
<pre>&lt;script src="lib/jquery.tablesorter.js" type="text/javascript"&gt;&lt;/script&gt;</pre>
<p>然后可以这样调用不着:</p>
<pre>$(document).ready(function() {<br />
$("#large").tableSorter();<br />
});</pre>
<p>现在点击表格的第一行head区域，你可以看到排序的效果，再次点击会按倒过来的顺序进行排列。</p>
<p>这个表格还可以加一些突出显示的效果，我们可以做这样一个隔行背景色（斑马线）效果:</p>
<pre>$(document).ready(function() {<br />
$("#large").tableSorter({<br />
stripingRowClass: ['odd','even'],	// Class names for striping supplyed as a array.<br />
stripRowsOnStartUp: true		// Strip rows on tableSorter init.<br />
});<br />
});</pre>
<p>关于这个插件的更多例子和文档可以在 <a href="http://motherrussia.polyester.se/jquery-plugins/tablesorter/">tablesorter首页</a>找到.</p>
<p>几乎所有的特件都是这样用的:先include插件的js文件,然后在某些元素上使用插件定义的方法,当然也有一些参数选项是可以配置的</p>
<p>经常更新的插件列表可以从jQuery官方站 <a title="Plugins for jQuery" href="http://jquery.com/plugins/">on the jQuery site</a>找到.</p>
<p>当你更经常地使用jQuery时,你会发现将你自己的代码打包成插件是很有用处的,它能方便地让你的公司或者其他人进行重用.下一章我们将谈到如何构建一个自己的插件.</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://jquery.com/plugins/">Plugins for jQuery</a>
    <li><a href="http://motherrussia.polyester.se/jquery-plugins/tablesorter/">Tablesorter Plugin</a> </li>
</ul>
</div>
<div>
<h2 id="plug">Plug me:制作自己的插件</h2>
<p>写一个自己的jQuery插件是非常容易的,如果你按照下面的原则来做,可以让其他人也容易地结合使用你的插件.</p>
<ol>
    <li>为你的插件取一个名字,在这个例子里面我们叫它"foobar".
    <li>创建一个像这样的文件:jquery.[yourpluginname].js,比如我们创建一个jquery.foobar.js
    <li>创建一个或更多的插件方法,使用继承jQuery对象的方式,如:
    <pre>jQuery.fn.foobar = function() {<br />
    // do something<br />
    };</pre>
    <li>可选的:创建一个用于帮助说明的函数,如:
    <pre>jQuery.fooBar = {<br />
    height: 5,<br />
    calculateBar = function() { ... },<br />
    checkDependencies = function() { ... }<br />
    };</pre>
    <p>你现在可以在你的插件中使用这些帮助函数了:</p>
    <pre>jQuery.fn.foobar = function() {<br />
    // do something<br />
    jQuery.foobar.checkDependencies(value);<br />
    // do something else<br />
    };</pre>
    <li>可选的l:创建一个默认的初始参数配置,这些配置也可以由用户自行设定,如:
    <pre>jQuery.fn.foobar = function(options) {<br />
    var settings = {<br />
    value: 5,<br />
    name: "pete",<br />
    bar: 655<br />
    };<br />
    if(options) {<br />
    jQuery.extend(settings, options);<br />
    }<br />
    };</pre>
    <p>现在可以无需做任何配置地使用插件了,默认的参数在此时生效:</p>
    <pre>$("...").foobar();</pre>
    <p>或者加入这些参数定义:</p>
    <pre>$("...").foobar({<br />
    value: 123,<br />
    bar: 9<br />
    });</pre>
    </li>
</ol>
<p>如果你release你的插件, 你还应该提供一些例子和文档,大部分的插件都具备这些良好的参考文档.</p>
<p>现在你应该有了写一个插件的基础,让我们试着用这些知识写一个自己的插件.</p>
<p>很多人试着控制所有的radio或者checkbox是否被选中,比如:</p>
<pre>$("input[@type='checkbox']").each(function() {<br />
this.checked = true;<br />
// or, to uncheck<br />
this.checked = false;<br />
// or, to toggle<br />
this.checked = !this.checked;<br />
});</pre>
<p>无论何时候，当你的代码出现each时，你应该重写上面的代码来构造一个插件,很直接地:</p>
<pre>$.fn.check = function() {<br />
return this.each(function() {<br />
this.checked = true;<br />
});<br />
};</pre>
<p>这个插件现在可以这样用:</p>
<pre>$("input[@type='checkbox']").check();</pre>
<p>现在你应该还可以写出uncheck()和toggleCheck()了.但是先停一下,让我们的插件接收一些参数.</p>
<pre>$.fn.check = function(mode) {<br />
var mode = mode || 'on'; // if mode is undefined, use 'on' as default<br />
return this.each(function() {<br />
switch(mode) {<br />
case 'on':<br />
this.checked = true;<br />
break;<br />
case 'off':<br />
this.checked = false;<br />
break;<br />
case 'toggle':<br />
this.checked = !this.checked;<br />
break;<br />
}<br />
});<br />
};</pre>
<p>这里我们设置了默认的参数,所以将"on"参数省略也是可以的,当然也可以加上"on","off", 或 "toggle",如:</p>
<pre>$("input[@type='checkbox']").check();<br />
$("input[@type='checkbox']").check('on');<br />
$("input[@type='checkbox']").check('off');<br />
$("input[@type='checkbox']").check('toggle');</pre>
<p>如果有多于一个的参数设置会稍稍有点复杂,在使用时如果只想设置第二个参数,则要在第一个参数位置写入null.</p>
<p>从上一章的tablesorter插件用法我们可以看到,既可以省略所有参数来使用或者通过一个 key/value 对来重新设置每个参数.</p>
<p>作为一个练习,你可以试着将 <a href="http://www.k99k.com/jQuery_getting_started.html#rate">第四章</a> 的功能重写为一个插件.这个插件的骨架应该是像这样的:</p>
<pre>$.fn.rateMe = function(options) {<br />
var container = this; // instead of selecting a static container with $("#rating"), we now use the jQuery context<br />
<br />
var settings = {<br />
url: "rate.php"<br />
// put more defaults here<br />
// remember to put a comma (",") after each pair, but not after the last one!<br />
};<br />
<br />
if(options) { // check if options are present before extending the settings<br />
$.extend(settings, options);<br />
}<br />
<br />
// ...<br />
// rest of the code<br />
// ...<br />
<br />
return this; // if possible, return "this" to not break the chain<br />
});</pre>
</div>
<div>
<h2 id="next">Next steps(下一步)</h2>
<p>如果你想做更好的javascript开发,建议你使用一个叫 <a href="http://www.joehewitt.com/software/firebug/">FireBug</a>的firefox插件. 它提供了断点调试(比alert强多了)、观察DOM变化等很多漂亮的功能</p>
<p>如果你还有未解决的问题，或者新的想法与建议，你可以使用jQuery的邮件列表 <a href="http://jquery.com/discuss">jQuery mailing list</a>.</p>
<p>关于这个指南的任何事情，你可以写<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#101;&#110;&#99;&#104;&#111;&#115;&#37;&#50;&#48;&#37;&#53;&#66;&#97;&#116;&#37;&#53;&#68;&#37;&#50;&#48;&#103;&#109;&#120;&#37;&#50;&#48;&#37;&#53;&#66;&#100;&#111;&#116;&#37;&#53;&#68;&#37;&#50;&#48;&#110;&#101;&#116;">mail</a>给作者或者发表评论在他的日志：<a href="http://bassistance.de/index.php/2006/09/12/jquery-getting-started-guide/">blog</a>.</p>
<p class="log">关于这个指南的翻译任何事情，你可以写<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#107;&#101;&#101;&#108;&#46;&#115;&#105;&#107;&#101;&#37;&#53;&#66;&#97;&#116;&#37;&#53;&#68;&#37;&#50;&#48;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">mail</a>给我或者发表评论在我的日志：<a href="http://keelsike.blogspot.com/">blog</a>.</p>
</div>
<div>
<h3>还有什么...</h3>
<p>大大感谢John Resig创造了这么好的library! 感谢jQuery community 为John提供了如此多的咖啡和其他的一切!</p>
</div>
<h4><a href="http://bassistance.de/">&#169; 2006, J&#246;rn Zaefferer</a> - last update: 2006-09-12</h4>
<h4>中文版翻译:<a href="http://keelsike.blogspot.com/">Keel</a> - 最后更新: 2006-12-13</h4>
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script><script type="text/javascript">_uacct = "UA-333331-1";urchinTracker();</script>
<img src ="http://www.blogjava.net/yifeng/aggbug/224337.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2008-08-26 01:43 <a href="http://www.blogjava.net/yifeng/archive/2008/08/26/224337.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>