`
yifeng
  • 浏览: 52949 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AJAX基础与实践(四)

    博客分类:
  • Ajax
阅读更多
 

responseXML 将响应解析为XML

Ø 浏览器把XML 看作是遵循W3C DOM 的XML文档。

Ø W3C DOM 指定了一组很丰富的API ,可用于搜索和处理XML 文挡。

W3C DOM

Ø W3C 提供的定义:

文档对象模型(DOM) 是与平台和语言无关的接口,允许程序和脚本动态地访问和更新文档的内容、结构和样式。文档可以进一步处理,处理的结果可以放回到所提供的页面中。

W3C DOM 和JavaScript区别?

Ø DOM 是面向HTML 和XML 文档的API,为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。

Ø JavaScript 则是用于访问和处理DOM 的语言。

Ø 如果没有DOM , JavaScript 根本没有Web 页面和构成页面元素的概念。文档中的每个元素都是DOM 的一部分,这就使得JavaScript 可以访问元素的属性和方法。

DOM元素属性

Ø 用于处理XML 文挡的DOM 元素属性:

属性名

描述

childNodes

返回当前元素的所有子元素的数组

firstChild

返回当前元素的第一个下级子元素

lastChild

返回当前元素的最后一个子元素

nextSibling

返回紧跟在当前元素后面的元素

nodeValue

指定表示元素值得读/写属性

parentNode

返回元素的父节点

previousSibling

返回紧邻当前元素之前的元素

DOM元素方法

Ø 用于遍历XML文挡的DOM 元素方法

方法名

描述

getElementById(id) (document)

获取有指定唯一ID属性值文档中的元素

getElementsByTagName(name)

返回当前元素中有指定标记名的子元素的数组

hasChildNodes()

返回一个布尔值,指示元素之否有子元素

getAttribute(name)

返回元素的属性值,属性由name指定

DEMO responseXML + DOM

Ø DEMO

服务器返回的美国州名列表 parseXML.xml

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

<states>

    <north>

        <state>Minnesota</state>

        <state>Iowa</state>

        <state>North Dakota</state>

    </north>

    <south>

        <state>Texas</state>

        <state>Oklahoma</state>

        <state>Louisiana</state>

    </south>  

 <east>

        <state>New York</state>

        <state>North Carolina</state>

        <state>Massachusetts</state>

  </east>

  <west>

        <state>California</state>

        <state>Oregon</state>

        <state>Nevada</state>

    </west>

</states>

Ø parseXML.html内容

<html>

         <head>

                   <title>Parsing XML Responses with the W3C DOM</title>

                   <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

                   <script type="text/javascript">

var xmlHttp;

var requestType = "";

function createXMLHttpRequest() {

    if (window.ActiveXObject) {

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

    } 

    else if (window.XMLHttpRequest) {

        xmlHttp = new XMLHttpRequest();

    }

}

function startRequest(requestedList) {

    requestType = requestedList;

    createXMLHttpRequest();

    xmlHttp.onreadystatechange = handleStateChange;

    xmlHttp.open("GET", "parseXML.xml", true);

    xmlHttp.send(null);

}

function handleStateChange() {

    if(xmlHttp.readyState == 4) {

        if(xmlHttp.status == 200) {

            if(requestType == "north") {

                listNorthStates();

            }

            else if(requestType == "all") {

                listAllStates();

            }

        }

    }

}

function listAllStates() {

    var xmlDoc = xmlHttp.responseXML;

    var allStates = xmlDoc.getElementsByTagName("state");

    outputList("All States in Document", allStates);

}

function listNorthStates() {

    var xmlDoc = xmlHttp.responseXML;

    var northNode = xmlDoc.getElementsByTagName("north")[0];

            var out = "Northern States";

    var northStates = northNode.getElementsByTagName("state");

    outputList("Northern States", northStates);

}

</script>

</head>

<body onload="startRequest();">

</body>

</html>

使用W3C DOM 动态编辑页面

Ø 使用W3C DOM 动态编辑页面

Ø 动态创建内容时所用的W3C DOM 属性和方法

属性、方法名

描述

document.createElement(tagName)

文档对象上的createElement 方法可以创建由tagName指定的元素。如果以串div作为方法参数,就会动态生成一个div元素

document.createTextNode(data)

文档对象的createTextNode方法会创建一个包含静态文本的节点

<Element>.appendChild(newChild)

appendChild方法将指定的节点增加到当前元素的子节点列表(作为一个新的子节点。)例如,可以增加一个option元素,作为select元素的子节点

<Element>. getAttribute(name)

这个方法获得元素中name属性的值

<Element>. setAttribute(name,value)

这个方法设置元素中name属性的值

<Element>.insertBefore(newChild, refChild)

这个方法将节点newChild作为当前元素的子节点插入refChild元素前面

<Element>.removeAttribute(name)

这个方法从元素中删除属性name

<Element>.removeChild(oldChild)

这个方法从元素中删除子元素oldChild

<Element>.replaceChild(newChild, refChild)

这个方法将节点refChild替换为节点newChild

<Element>.hasChildNodes()

这个方法返回一个布尔值,指示元素是否有子元素

DEMO 使用responseXMLDOM 动态编辑页面

Ø dynamicContent.xml文件内容

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

<properties>

    <property>

        <address>812 Gwyn Ave</address>

        <price>$100,000</price>

        <comments>Quiet, serene neighborhood</comments>

    </property>

    <property>

        <address>3308 James Ave S</address>

        <price>$110,000</price>

        <comments>Close to schools, shopping,entertainment</comments>

    </property>

    <property>

        <address>98320 County Rd 113</address>

        <price>$115,000</price>

        <comments>Small acreage outside of town</comments>

    </property>

</properties>

Ø 然后撰写dynamicContent.html文件的内容

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

        "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

    <title>Dynamically Editing Page Content</title>

    <script type="text/javascript" language="javascript">

        var xmlHttp;

        function createXMLHttpRequest() {

            if (window.ActiveXObject) {

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

            } else if (window.XMLHttpRequest) {

                xmlHttp = new XMLHttpRequest();

            }

        }

        function doSearch() {

            createXMLHttpRequest();

            xmlHttp.onreadystatechange = handleStateChange;

            xmlHttp.open("GET", "dynamicContent.xml", true);

            xmlHttp.send(null);

        }

        function handleStateChange() {

            if (xmlHttp.readyState == 4) {

                if (xmlHttp.status == 200) {

                    clearPreviousResults();

                    parseResults();

                }

            }

        }

        function clearPreviousResults() {

            var header = document.getElementById("header");

            if (header.hasChildNodes()) {

                header.removeChild(header.childNodes[0]);

            }

            var tableBody = document.getElementById("resultsBody");

            while (tableBody.childNodes > 0) {

                tableBody.removeChild(tableBody.childNodes[0]);

            }

        }

        function parseResults() {

            var results = xmlHttp.responseXML;

            var property = null;

            var address = "";

            var price = "";

            var comments = "";

            var properties = results.getElementsByTagName("property");

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

                property = properties[i];

                address = property.getElementsByTagName("address")[0].firstChild.nodeValue;

                price = property.getElementsByTagName("price")[0].firstChild.nodeValue;

                comments = property.getElementsByTagName("comments")[0].firstChild.nodeValue;

                addTableRow(address, price, comments);

            }

            var header = document.createElement("h2");

            var headerText = document.createTextNode("Results:");

            header.appendChild(headerText);

            document.getElementById("header").appendChild(header);

            document.getElementById("resultsTable").setAttribute("border", "1");

        }

        function addTableRow(address, price, comments) {

            var row = document.createElement("tr");

            var cell = createCellWithText(address);

            row.appendChild(cell);

            cell = createCellWithText(price);

            row.appendChild(cell);

            cell = createCellWithText(comments);

            row.appendChild(cell);

            document.getElementById("resultsBody").appendChild(row);

        }

        function createCellWithText(text) {

            var cell = document.createElement("td");

            var textNode = document.createTextNode(text);

            cell.appendChild(textNode);

            return cell;

        }

    </script>

</head>

<body>

    <form action="#" >

        <select>

            <option value="50000">$50,000</option>

            <option value="100000">$100,000</option>

            <option value="150000">$150,000</option>

        </select> to

        <select>

            <option value="100000">$100,000</option>

            <option value="150000">$150,000</option>

            <option value="200000">$200,000</option>

        </select>

        <input type="button" value="Search" onclick="doSearch();"/>

    </form>

    <span id="header"></span>

    <table id="resultsTable" width="75%" border="0">

        <tbody id="resultsBody"></tbody>

    </table>

</body>

</html>

Ø 运行界面,点击“search”按钮,如下图:



 

Ø 总结:

1、 parseResults 函数中使用XMLHttpRequest对象的responseXML 属性得到的XML 文挡。

2、 利用DOM方法来解析XML文档。

3、 addTableRow 函数建立一个表。

4、 就这么多!你已经成功地读取了服务器返回的XML 文档,而且动态创建了一个结果表。




作者:周大庆(zhoudaqing)
网址:http://www.blogjava.net/yifeng
>>>转载请注明出处!<<<

分享到:
评论

相关推荐

    ajax基础与实践教程(含php json实例)

    在"ajax基础与实践教程(含php json实例)"中,可能包含了如何使用Ajax与PHP结合,通过JSON进行数据交换的详细步骤。例如,创建一个PHP脚本生成JSON数据,然后在JavaScript中创建Ajax请求,解析返回的JSON数据并更新...

    Ajax基础与实践教程(含源码)

    **Ajax基础与实践教程** Ajax,全称Asynchronous JavaScript and XML,是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新。Ajax的核心是...

    AJAX的综合应用,AJAX基础与实践

    **AJAX基础与实践** AJAX(Asynchronous JavaScript and XML)是一种在不重新加载整个网页的情况下,能够更新部分网页的技术。这种技术的核心在于利用JavaScript创建XMLHttpRequest对象,通过这个对象与服务器进行...

    精通Ajax 基础概念.核心技术与典型案例

    ## **一、Ajax基础概念** 1. **异步通信**:Ajax的核心是JavaScript对象XMLHttpRequest,它允许在后台与服务器进行通信,不阻塞用户对页面的操作。 2. **局部刷新**:Ajax可以只更新网页的部分区域,而不是整个页面...

    Ajax模式与最佳实践英文原版

    1. **XMLHttpRequest对象**:Ajax的基础,用于在后台与服务器通信。理解它的生命周期、方法(如open、send、onreadystatechange等)以及状态码是掌握Ajax的关键。 2. **数据格式**:虽然名字中包含XML,但现代Ajax...

    AJax与PHP基础教程.

    **第一章 - Ajax基础** 在这一章中,你将学习到Ajax的基本概念,包括异步通信的重要性、XMLHttpRequest对象的使用以及如何创建简单的Ajax请求。了解如何通过JavaScript与服务器进行交互,实现页面内容的动态加载,...

    Ajax基础实例讲解

    Ajax(Asynchronous JavaScript and XML)是一种在...Ajax是Web开发中的重要技术,理解并掌握Ajax的基本原理和实践,能帮助你构建更加动态、响应式的网页应用。通过不断练习和项目实战,你可以更好地理解和运用Ajax。

    14ajax课程_AJAX基础_

    **AJAX基础详解** 在现代Web开发中,AJAX(Asynchronous JavaScript and XML)是一种核心技术,它使得网页能够实现异步数据交换,无需刷新整个页面即可更新部分内容。本教程将深入探讨AJAX的基础知识,帮助你理解其...

    AJAX基础教程

    **AJAX基础教程** 在Web开发领域,AJAX(Asynchronous JavaScript and XML)是一种不可或缺的技术,它使得网页可以在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容。本教程将带您深入理解AJAX的基本...

    Ajax 基础教程中文版.pdf

    **Ajax(Asynchronous JavaScript and XML)**是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。...通过阅读"Ajax基础教程中文版",你可以深入了解Ajax的工作原理,学会如何在实践中运用它。

    Ajax基础与实战.jar

    这个名为“Ajax基础与实战.jar”的压缩包,很可能包含了学习和实践Ajax技术的相关资料。 在学习Ajax的基础知识时,你需要了解以下几个关键点: 1. **XMLHttpRequest对象**:这是Ajax的核心,用于在后台与服务器...

    ajax入门基础教程

    在文章的最后部分,作者分享了自己的学习经历,提到了通过与专家的互动以及多次的交流和编程实践,能够更快地深入理解AJAX技术,并掌握相关的开发技巧。这也从另一个侧面强调了实践经验对于学习编程技术的重要性。

    四天学会ajax_ajax教程

    1. **基础概念**:首先,你需要理解Ajax的基本工作原理,包括它如何利用JavaScript发送异步请求到服务器,并处理响应数据。 2. **XMLHttpRequest对象**:Ajax的核心是XMLHttpRequest(XHR)对象,它是JavaScript的...

    AJAX基础教程-5 Ajax Validate

    **标题:“AJAX基础教程-5 Ajax Validate”** 在学习Web开发时,AJAX(Asynchronous JavaScript and XML)技术是一个重要的组成部分,它允许我们在不刷新整个页面的情况下与服务器进行交互,提升用户体验。本教程...

    Ajax的入门与实践.pdf

    Ajax 入门与实践 Ajax 是基于 XML 的异步 JavaScript, 是当前 Web 创新的重要组成部分。Ajax 这个术语源自描述从基于同页的 Web 应用到基于数据应用的转换。在基于数据的应用中,用户需要的数据,如联系人列表,...

    AJAX基础到精通教程

    **AJAX基础到精通教程** AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新,大大提升了用户...

    ajax基础教程源码第四章

    **Ajax基础教程源码第四章** 在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种创建动态网页的技术,允许页面在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。本教程将深入讲解AJAX的...

    Ajax基础教程

    **Ajax基础教程** Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。这种技术在现代Web开发中被广泛应用,极大地提升了用户体验,因为它允许页面在后台与服务器...

    ajax基础教程和ajax从入门到精通

    **Ajax基础教程** Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新,提升了用户体验,使得用户在...

Global site tag (gtag.js) - Google Analytics