AJAX--操作xml

来源:互联网 发布:smarty二维数组遍历 编辑:程序博客网 时间:2024/04/30 21:24

AJAX指南----操作XML

2008-05-18 22:45

我们来学习如何使用AJAX操作XML

首先我们需要创建一个XMLHttp对象:

 

<script type="text/javascript">

//声明XMLHttpRequest函数

var xmlHttp;

function CreateXMLHTTP()

{

    //IE浏览器创建XMLHttpRequest

    if(window.ActiveXObject)

    {

       try

       {

            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");

       }

       catch(e)

       {

            try

               {

                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");

               }

               catch(e)

               {

                    xmlHttp=false;

               }

       }

    }

    //非Microsoft浏览器创建XMLHttpRequest

    else if(window.XMLHttpRequest)

    {

       xmlHttp=new XMLHttpRequest();

    }

    if(!xmlHttp)

    {

        window.alert("不能创建XMLHttpRequest对象实例");

        return false;

    }

}

</script>


假设我们有一个XML文件mailbox.xml,它的内容如下:

<?xml version="1.0" encoding="utf-8" ?>

<mailbox>

  <mail>

    <to>老李</to>

    <from>老张</from>

    <heading>好久不见!</heading>

    <body>好久不见,最近好吗?</body>

  </mail>

  <mail>

    <to>小李</to>

    <from>小王</from>

    <heading>周末有空么?</heading>

    <body>周末有空么?一起看场电影吧!</body>

  </mail>

</mailbox>


可以看到,里面存储了两封邮件,现在我们的目标就是把这两封邮件以HTML的方式展现出来,首先我们需要创建一个简单的HTML的界面:

<button onclick="loadXMLDoc('mailbox.xml')">查看书架</button>

<br />

<div id="ajax-sample"></div>


ajax-sample
块用于展示邮件,但查看信箱按钮被按下时,loadXMLDoc函数将被调用:

function loadXMLDoc(name)

{

    CreateXMLHTTP();

    xmlHttp.open("GET", name, true);

    xmlHttp.onreadystatechange = parseMailBox;

    xmlHttp.send(null);

}


可以看到,这个函数只是简单的向服务器发送一个GET请求,真正对XML文档进行处理的是parseMailBox函数:

function parseMailBox()

{

    //4表示请求已完成

    if (xmlHttp.readyState == 4)

    {

        alert('6');

        //responseXML是一个HTML DOM Document对象,

        //我们将使用它来解析XML文档

        var mailBoxXML = xmlHttp.responseXML;

        //获取所有信件

        var mails = mailBoxXML.getElementsByTagName('mail');

        var mailStr = "";

 

        for (var i = 0; i < mails.length; i++) {

            var mail = mails[i];

 

            //解析信件

            var to = getElementText(mail, "to");

            var from = getElementText(mail, "from");

            var heading = getElementText(mail, "heading");

            var body = getElementText(mail, "body");

 

            //为信件添加附属信息

            mailStr += "收信人:" + to + "<br>";

            mailStr += "发信人:" + from + "<br>";

            mailStr += "标题:" + heading + "<br>";

            mailStr += "正文: " + body + "<br><br>";

        }

    //将信件展示到页面上

    document.getElementById("ajax-sample").innerHTML = mailStr;

    }

}


getElemenText
函数相当简单,它的作用就是获取一个元素的文本:

function getElementText(parentElem, name)

{

    var result = parentElem.getElementsByTagName(name)[0];

    return result.firstChild.data;

}


这样一个XML文档就解析完毕了,是不是相当的简单。


 

附加两个样例代码:

样例1.

HTMLPS:放在VS2005环境中运行(推荐),或者发布为ASP网站运行均可

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "Http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>无标题页</title>

<script type="text/javascript">

//声明XMLHttpRequest函数

var xmlHttp;

function CreateXMLHTTP()

{

    //判断浏览器是否支持IEXMLHttpRequest

    if(window.ActiveXObject)

    {

       try

       {

            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");//ie老版本

       }

       catch(e)

       {

            try

               {

                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");//ie新版本

               }

               catch(e)

               {

                    xmlHttp=false;

               }

       }

    }

    //判断浏览器是否支持mozillaXMLHttpRequest

    else if(window.XMLHttpRequest)

    {

       xmlHttp=new XMLHttpRequest();//mozilla浏览器

    }

    if(!xmlHttp)

    {

        window.alert("不能创建XMLHttpRequest对象实例");

        return false;

    }

}

function loadXMLDoc(name)

{

    CreateXMLHTTP();

    xmlHttp.open("GET", name, true);

    xmlHttp.onreadystatechange = parseMailBox;

    xmlHttp.send(null);

}

function parseMailBox()

{

    //4表示请求已完成

    if (xmlHttp.readyState == 4)

    {

        //responseXML是一个HTML DOM Document对象,

        //我们将使用它来解析XML文档

        var mailBoxXML = xmlHttp.responseXML;

        //获取所有信件

        var mails = mailBoxXML.getElementsByTagName('mail');

        var mailStr = "";

 

        for (var i = 0; i < mails.length; i++) {

            var mail = mails[i];

 

            //解析信件

            var to = getElementText(mail, "to");

            var from = getElementText(mail, "from");

            var heading = getElementText(mail, "heading");

            var body = getElementText(mail, "body");

 

            //为信件添加附属信息

            mailStr += "收信人:" + to + "<br>";

            mailStr += "发信人:" + from + "<br>";

            mailStr += "标题:" + heading + "<br>";

            mailStr += "正文:<br>" + body + "<br><br>";

        }

    //将信件展示到页面上

    document.getElementById("ajax-sample").innerHTML = mailStr;

    }

}

function getElementText(parentElem, name)

{

    var result = parentElem.getElementsByTagName(name)[0];

    return result.firstChild.data;

}

</script>

 

</head>

<body>

    <button onclick="loadXMLDoc('mailbox.xml')">查看书架</button>

    <br />

    <div id="ajax-sample"></div>

</body>

</html>

xml代码】

文件名:mailbox.xml

代码:

<?xml version="1.0" encoding="utf-8" ?>

<mailbox>

  <mail>

    <to>老李</to>

    <from>老张</from>

    <heading>好久不见!</heading>

    <body>好久不见,最近好吗?</body>

  </mail>

  <mail>

    <to>小李</to>

    <from>小王</from>

    <heading>周末有空么?</heading>

    <body>周末有空么?一起看场电影吧!</body>

  </mail>

</mailbox>

============================================================


 

样例2.

aspx页代码】PS:放在VS2005环境中运行

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>AJAXXML实现无刷新联动</title>

<script type="text/javascript">

//<--=============== 创 建 xmlHttpRequest 对象 ===================-->

//声明XMLHttpRequest函数

var xmlHttp;

function CreateXMLHTTP()

{

    //判断浏览器是否支持XMLHttpRequest

    if(window.ActiveXObject)

    {

       try

       {

            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");//ie老版本

       }

       catch(e)

       {

            try

               {

                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");//ie新版本

               }

               catch(e)

               {

                    xmlHttp=false;

               }

       }

    }

    //判断浏览器是否支持XMLHttpRequest

    else if(window.XMLHttpRequest)

    {

       xmlHttp=new XMLHttpRequest();//mozilla浏览器

    }

    if(!xmlHttp)

    {

        window.alert("不能创建XMLHttpRequest对象实例");

        return false;

    }

}

function loadSmallType(xmlUrl)

{

    CreateXMLHTTP();

    xmlHttp.open("get",xmlUrl,true);

    xmlHttp.onreadystatechange = setSmallType;

    xmlHttp.send(null);

}

function setSmallType()

{

    if(xmlHttp.readyState==4)

    {

        if(xmlHttp.status==200)

        {

            var listXML = xmlHttp.responseXML;

            var typeSmalls = listXML.getElementsByTagName("typeSmall");

            var bigID = document.getElementById("Select1").value;

            if(bigID=="0")

            {

                return;

            }

            document.getElementById("Select2").length = 1;

            for(var i = 0; i < typeSmalls.length; i++)

            {

                var typeSmall = typeSmalls[i];

                var ID = getElementsText(typeSmall,"ID");

                var typeBigID = getElementsText(typeSmall,"typeBigID");

                var smallMarket = getElementsText(typeSmall,"smallMarket");

                if(typeBigID == bigID)

                {

                    document.getElementById("Select2").options.add(new Option(smallMarket,ID));

                }

            }

        }

    }

}

function getElementsText(parentElement,name)

{

    var result = parentElement.getElementsByTagName(name)[0];

    return result.firstChild.data;

}

</script>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <select id="Select1" runat="server" onchange="loadSmallType('xml/type.xml')">

            <option value="0" selected="selected">请选择</option>

        </select>

        <select id="Select2" name="typeSmall" runat="server">

            <option value="0" selected="selected">请选择</option>

        </select>

        <br />

        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /></div>

    </form>

</body>

</html>

xml代码】

文件名:mailbox.xml

代码:

<?xml version="1.0" standalone="yes"?>

<type>

  <typeBig>

    <ID>1</ID>

    <market>市场1</market>

  </typeBig>

  <typeBig>

    <ID>2</ID>

    <market>市场2</market>

  </typeBig>

  <typeBig>

    <ID>3</ID>

    <market>市场3</market>

  </typeBig>

  <typeBig>

    <ID>4</ID>

    <market>市场4</market>

  </typeBig>

  <typeBig>

    <ID>5</ID>

    <market>市场5</market>

  </typeBig>

  <typeBig>

    <ID>6</ID>

    <market>市场6</market>

  </typeBig>

  <typeSmall>

    <ID>1</ID>

    <typeBigID>1</typeBigID>

    <smallMarket>小市场1</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>2</ID>

    <typeBigID>1</typeBigID>

    <smallMarket>小市场2</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>3</ID>

    <typeBigID>1</typeBigID>

    <smallMarket>小市场3</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>4</ID>

    <typeBigID>1</typeBigID>

    <smallMarket>小市场4</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>5</ID>

    <typeBigID>2</typeBigID>

    <smallMarket>小市场5</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>6</ID>

    <typeBigID>2</typeBigID>

    <smallMarket>小市场6</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>7</ID>

    <typeBigID>2</typeBigID>

    <smallMarket>小市场7</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>8</ID>

    <typeBigID>2</typeBigID>

    <smallMarket>小市场8</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>9</ID>

    <typeBigID>3</typeBigID>

    <smallMarket>小市场9</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>10</ID>

    <typeBigID>3</typeBigID>

    <smallMarket>小市场10</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>11</ID>

    <typeBigID>3</typeBigID>

    <smallMarket>小市场11</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>12</ID>

    <typeBigID>3</typeBigID>

    <smallMarket>小市场12</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>13</ID>

    <typeBigID>4</typeBigID>

    <smallMarket>小市场13</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>14</ID>

    <typeBigID>4</typeBigID>

    <smallMarket>小市场14</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>15</ID>

    <typeBigID>4</typeBigID>

    <smallMarket>小市场15</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>16</ID>

    <typeBigID>4</typeBigID>

    <smallMarket>小市场16</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>17</ID>

    <typeBigID>5</typeBigID>

    <smallMarket>小市场17</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>18</ID>

    <typeBigID>5</typeBigID>

    <smallMarket>小市场18</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>19</ID>

    <typeBigID>5</typeBigID>

    <smallMarket>小市场19</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>20</ID>

    <typeBigID>5</typeBigID>

    <smallMarket>小市场20</smallMarket>

  </typeSmall>

  <typeSmall>

    <ID>21</ID>

    <typeBigID>6</typeBigID>

    <smallMarket>小市场21</smallMarket>

  </typeSmall>

</type>

 

 

原创粉丝点击