现在来回顾下AJAX模式实现的原理。首先在客户端创建一个XMLHttpRequest对象,这是AJAX的核心,用来与服务器进行异步通信。然后为该对象的onreadystatechange属性添加一个事件,当对象的readyState改变时就会触发指定的事件,这时发送请求读取服务器端的XML数据了。最后利用getElementsByTagName解析responseXML返回的值,完成数据的最后处理。广州网站建设
通过上面的执行可以看出,XML是AJAX数据传输的核心,那么什么是XML呢?下面从不同角度给出相应的解释。广州网站建设
XML指可扩展标记语言(EXtensible Markup Language)。
XML是一种标记语言,类似HTML。
XML的设计宗旨是传输数据,而非显示数据。
XML标签没有被预定义,需要自行定义标签。
XML被设计为具有自我描述性。
XML是W3C的推荐标准。
XML被设计为传输和存储数据,其核心是存储数据信息。它不同于HTML被设计用来显示数据,其焦点是数据的外观。可以更简要的描述为HTML旨在显示信息,而XML旨在传输信息。目前XML的应用已经无所不在,已经被作为各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描述领域变得越来越流行。
下面通过一个例子,来直观地了解AJAX是如何与XML文件进行交互式通信的。广州网站建设
(1)创建一个标准的XML文档用来存储数据。文件命名为Ajax.xml内容如下:
- <?xml version="1.0" encoding="utf-8" ?>
- <family>
- <member>
- <name>Mark</name>
- <doing>task1</doing>
- </member>
- <member>
- <name>Annie</name>
- <doing>task2</doing>
- </member>
- <member>
- <name>Nathan</name>
- <doing>task3</doing>
- </member>
- <member>
- <name>Rob</name>
- <doing>task4</doing>
- </member>
- <member>
- <name>Chris</name>
- <doing>task5</doing>
- </member>
- </family>
(2)创建一个文件名为AjaxDemo.html的文件,来读取和处理XML文档的数据,获得数据后再通过一个2列5行的表格显示出来。具体的代码如下:
广州网站设计
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Ajax-xml</title>
- <script type="text/JavaScript">
- <!--
- function GetXmlHttpObject(){
- xmlHttp=null;
- try{
- xmlHttp = new XMLHttpRequest(); //针对Firefox、Opera及Safari浏览器
- }
- catch(e){
- try{
- xmlHttp = new ActiveObject("Msxml2.XMLHTTP");
- //针对Internet Explorer 6.0+
- }
- catch(e){
- try{
- xmlHttp = new ActiveObject("Microsoft.XMLHTTP");
- //针对Internet Explorer 5.5+
- }
- catch(e){
- alert('对不起!您的浏览器不支持AJAX'); //弹出错误提示信息(AJAX失败)
- return false;
- }
- }
- }
- return xmlHttp;
- }
- //改变状态
- function state_Changed(){
- if(xmlHttp.readyState!=4)return;
- if(xmlHttp.status!=200){
- alert('加载XML文件失败'); //弹出错误提示信息(XML失败)
- return;
- }
- txt="<table border='1'>";
- x=xmlHttp.responseXML.documentElement.getElementsByTagName("member");
- for (i=0;i<x.length;i++)
- {
- txttxt=txt + "<tr>";
- xxx=x[i].getElementsByTagName("name"); //传回名称为name的元素集合
- {
- try
- {
- txttxt=txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
- }
- catch (er)
- {
- txttxt=txt + "<td> </td>";
- }
- }
- xxx=x[i].getElementsByTagName("doing"); //传回名称为doing的元素集合
- {
- try
- {
- txttxt=txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";//子节点的值
- }
- catch (er)
- {
- txttxt=txt + "<td> </td>";
- }
- }
- txttxt=txt + "</tr>";
- }
- txttxt=txt + "</table>";
- document.getElementById('name').innerHTML = txt; //为name元素赋值
- }
- function showXml(url){
- xmlHttp = GetXmlHttpObject();
- if(xmlHttp!=null){
- xmlHttp.onreadystatechange = state_Changed; //修改对象状态
- xmlHttp.open("GET",url,true);
- xmlHttp.send(null);
- }
- }
- //-->
- </script>
- </head>
- <body>
- <p><span id="name"></span></p>
- <form><input type="button" value="显示XML" id="ok" name="ok"
- onclick="showXml('Ajax.xml')" /></form>
- </body>
- </html>
广州网站设计
(3)在浏览器中执行AjaxDemo.html文件,预览效果如图9.3所示。
![]() |
| 图9.3 AJAX与XML文件数据通信 |




