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

Ajax学习(4)---在请求和响应中使用 XML(2)

    博客分类:
  • Ajax
阅读更多
----前言
在 Ajax 应用程序中,使用 XML 作为发送数据的格式的理由很少,但使服务器向 客户机回发 XML 的理由很多。
理由:(1)客户机以名称/值对发送请求(2)服务器无法(以一种标准方式)发送名称/值对
在大多数情况下,客户机不需要使用 XML,因为他们会使用名称/值对发送请求。因此,您可能会发送一个这样的名称:name=jennifer。只需简单地在连续的名称/值对之间添加一个 “与” 符号(&),即可将其放在一起,就像这样:name=jennifer&job=president。使用简单的文本和这些名称值对,客户机即可轻松向服务器请求多个值。很少需要用到 XML 提供的额外结构(及其带来的额外开销)。
实际上,需要向服务器发送 XML 的所有理由都差不多可以归入以下两个基本的类别中:
服务器仅 接受 XML 请求。在这类情况下,您别无选择。上一期文章中介绍的基础知识应已使您掌握了发送此类请求所必需的工具。
您正在调用一个仅接受 XML 或 SOAP 请求的远程 API。这实际上就是上一种情况的特例,但值得单独拿出来提一下。如果您希望在一个异步请求中使用来自 Google 或 Amazon 的 API,就会有一些特殊的考虑事项。
如果服务器使用字符串 name=jennifer&job=president 应答一个应用程序,客户机没有任何标准化的简便方法来将每个对拆分成名称和值。您必须手动解析所返回的数据。如果服务器返回一个由名称/值对构成的响应,这样的响应的解释难度与使用分号、竖线或其他任何非标准格式化字符相同。对于您来说,这就意味没有任何简单的方法在响应中使用纯文本使客户机以一种标准的方法获取并解释响应,至少在响应包含多个值时是如此。


----使用XML:
意识到没有任何标准的方法可以使服务器使用名称/值对响应客户机之后,使用 XML 的原因也就显而易见了。向客户机发送数据时,名称/值对是非常好的选择,因为服务器和服务器端语言可以轻松解释名称/值对;向客户机返回数据时使用 XML 也是如此。有几种方法可从服务器获得 XML 响应,并使用较为标准的代码提取数据,在客户机中使用这些数据。
清单 1.服务器响应(XML 格式)
<ratings>
<show>
  <title>Alias</title>
  <rating>6.5</rating>
</show>
<show>
  <title>Lost</title>
  <rating>14.2</rating>
</show>
<show>
  <title>Six Degrees</title>
  <rating>9.1</rating>
</show>
</ratings>


----将 XML 作为纯文本处理
处理 XML 的最简单的选择(至少就学习新的编程技术而言),就是用与处理服务器返回的其他文本片段相同的方法来处理它。换言之,基本上就是忽略数据格式,只关注服务器的响应。
在这种情况下,您要使用请求对象的 responseText 属性,就像在服务器向您发送非 XML 响应时一样。

清单 2. 将 XML 作为普通服务器响应处理
function updatePage() {
  if (request.readyState == 4) {
    if (request.status == 200) {
      var response = request.responseText;// response has the XML response from the server
      alert(response);
    }
  }
}
在这个代码片段中,updatePage() 是回调方法,request 是 XMLHttpRequest 对象。最终,您将得到把所有一切串联在一起的 XML 响应,位于 response 变量之中。
清单 3.response 变量的值:
<ratings><show><title>Alias</title><rating>6.5</rating>
</show><show><title>Lost</title><rating>14.2</rating></show><show>
<title>Six Degrees</title><rating>9.1</rating></show></ratings>

在这里,您可以使用 JavaScript split 函数来拆分此数据,并通过基本的字符串操作来获得元素的名称和值。毫无疑问,这是个令人头疼的过程,它无视于您花费了大量时间来阅读前几期文章中 DOM(Document Object Model)相关内容这一事实。因此,我要强调,您应该牢记:利用 responseText,可以轻松使用和输出服务器的 XML 响应,但我不会为您展示太多的代码,在能够使用 DOM 时,您不应选择这种方法来获得 XML 数据,下面您会看到这一点。
尽管可以 将服务器的 XML 格式的响应视同为其他任何文本响应来处理,但这样做没有很好的理由。使用 DOM 这种对 JavaScript 友好的 API 来操纵 XML。还有更好的事情,JavaScript 和 XMLHttpRequest 对象提供了一个属性,它能完美地获取服务器的 XML 响应,并且是以 DOM Document 对象的形式来获取它。
清单 4 给出了一个实例。这段代码与 清单 2 类似,但没有使用 responseText 属性,回调函数使用的是 responseXML 属性。该属性在 XMLHttpRequest 上可用,它以 DOM 文档的格式返回服务器的响应。
清单 4. 将 XML 当作 XML
function updatePage() {
  if (request.readyState == 4) {
    if (request.status == 200) {
      var xmlDoc = request.responseXML;// work with xmlDoc using the DOM
    }
  }
}
现在您有了一个 DOM Document,可以像处理其他任何 XML 一样处理它。例如,随后可能要获取所有 show 元素,如 清单 5 所示。
清单 5. 获取所有 show 元素
function updatePage() {
  if (request.readyState == 4) {
    if (request.status == 200) {
      var xmlDoc = request.responseXML;
      var showElements = xmlDoc.getElementsByTagName("show");
    }
  }
}
如果您熟悉 DOM,从这儿开始,看起来就应该有几分熟悉了。您可以使用您所了解的全部 DOM 方法,轻松操纵从服务器处接收到的 XML。
当然,您也可以混用普通的 JavaScript 代码。例如,可以遍历所有 show 元素,如 清单 6 所示。
清单 6. 遍历所有 show 元素
function updatePage() {
  if (request.readyState == 4) {
    if (request.status == 200) {
      var xmlDoc = request.responseXML;
      var showElements = xmlDoc.getElementsByTagName("show");
      for (var x=0; x<showElements.length; x++) {
        // We know that the first child of show is title, and the second is rating
        var title = showElements[x].childNodes[0].value;
        var rating = showElements[x].childNodes[1].value;
        // Now do whatever you want with the show title and ratings
      }
    }
  }
}
通过这段非常简单的代码,您正是将 XML 响应作为 XML 而不是无格式的纯文本进行了处理,还使用了一点 DOM 和简单的 JavaScript 来处理服务器响应。更重要的是,您使用了标准化的格式 —— XML,而不是以逗号分隔的值或以竖线分隔的名称/值对。换句话说,您将 XML 用在了最适合它的地方,避免了在不适合的地方使用它(比如说向服务器发送请求时)。


----解释 XML 的其他可选方法
除将 XML 作为无格式文本处理或使用 DOM 处理之外,还有一种非常流行的选择很重要,值得一提。那就是 JSON(JavaScript Object Notation),这是一种绑定在 JavaScript 内的自由文本格式。大体上,可以用 JSON 做的事,用 DOM 都可以完成,反之亦然;选择主要取决于偏好,当然也要为特定的应用程序选择正确的方法。就现在而言,您应坚持使用 DOM,在接收服务器响应的过程中熟悉 DOM。
分享到:
评论

相关推荐

    Ajax\掌握 Ajax第 7 部分-在请求和响应中使用 XML

    Ajax\掌握 Ajax第 7 部分-在请求和响应中使用 XML

    掌握 Ajax第 8 部分-在请求和响应中使用 XML.pdf

    掌握 Ajax第 8 部分-在请求和响应中使用 XML.pdf

    掌握Ajax系列7:在请求和响应中使用XML(上)

    在本系列前面的文章中,我们使用普通文本和名/值参数发送数据,但XML也是一种可行的格式。本文将介绍如何来这样做。但最重要的是,我将讨论为何可以使用 XML作为请求格式,以及为何在多数情况下不应该使用它。

    掌握Ajax 学习资料pdf

    掌握 Ajax第 1 部分-Ajax 简介 掌握 Ajax第 2 部分-使用 JavaScript 和 Ajax 发出...掌握 Ajax第 7 部分-在请求和响应中使用 XML 掌握 Ajax第 10 部分--使用 JSON 进行数据传输 掌握 Ajax第 11 部分--服务器端的 JSON

    Ajax3_在请求和响应中使用XML

    XMLHttpRequest是Ajax应用程序中使用的基本对象。看起来它似乎是为通过HTTP请求发送XML或者以某种XML格式发出HTTP请求而设计的,但实际上它要做的只不过是为客户机代码(在网页中通常是JavaScript)提供一种发送HTTP...

    掌握Ajax系列8:在请求和响应中使用XML(下)

    在Ajax应用程序中,使用XML作为发送数据的格式的理由很少,但使服务器向 客户机回发XML的理由很多。因此,您在上一篇文章中学到的关于XML的知识最终将在这篇文章中体现出某些价值。这篇文章主要探讨在大多数情况下...

    掌握 Ajax 在请求和响应中使用 XML

    无论考虑转向 XHTML 的网页设计人员、使用 JavaScript 的 Web 程序员、使用部署描述文件和数据绑定的服务器端程序员,还是研究基于 XML 的数据库的后端开发人员,都在使用这种可扩展标记语言。因此,XML 被认为是 ...

    AJAX 学习资料WORD文档

    第 1 部分: Ajax 入门...第 7 部分: 在请求和响应中使用 XML 80 第 8 部分: 在请求和响应中使用 XML 87 第 9 部分: Web 2.0 用户界面技术 95 第 10 部分: 使用 JSON 进行数据传输 100 第 11 部分: 服务器端的 JSON 105

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    你要在DTD中定义一个元素,然后在XML文档中使用。元素的定义语法为:&lt;!ELEMENT DESCRIPTION (#PCDATA, DEFINITION)*&gt; 说明: "&lt;!ELEMENT" 是元素的声明,说明你要定义的是一个元素; 声明后面的"DESCRIPTION",...

    掌握Ajax,第7部分:在请求和响应中使用XML

    在本文中,您将看到服务器如何在请求响应中发送XML。 现在如果不使用XML就不能进行任何有意义的编程。无论考虑转向XHTML的网页设计人员、使用JavaScript的Web程序员、使用部署描述文件和数据绑定的服务器端程序员,...

    AJax详解.chm

    第 7 部分: 在请求和响应中使用 XML 第 8 部分:在请求和响应中使用 XML 第 9 部分: 使用 Google Ajax Search API 第 10 部分: 使用 JSON 进行数据传输 第 11 部分:将 Ajax 带入 Eclipse 的 Ajax Toolkit ...

    学习ajax必看ppt--总结的很全面看描述

    01_Ajax基础;02_使用Ajax发送异步请求;03_在请求和响应中使用XML;04_使用JSON进行数据传输;对XML文档进行分析

    Ajax详解

    内容简要给大家说明一下:Ajax简介、使用Javascript和Ajax发出异步请求、Ajax中的高级请求响应、利用Dom进行Web响应、操作dom、建立基于Dom的Web应用程序、在请求和响应中使用XML、使用Json进行数据传输、...

    Ajax-faux-jax.zip

    Ajax-faux-jax.zip,不再维护:拦截并响应浏览器(ajax)和node.js(http(s)模块)中的请求,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,...

    Ajax的学习资料

    Ajax的学习资料 Ajax基础 DOM基础 基于DOM的Web应用程序示例 使用Ajax发送异步请求 在请求和响应中使用XML 使用JSON进行数据传输

    什么是Ajax?Ajax如何发送请求(详)源码

    什么是Ajax?Ajax如何发送请求? ... Ajax 是 Asynchronous Javascript And XML 的缩写,它是异步的 Javascript 和 XML技术,是由 Javascript 、 XML 、DOM、CSS等多种已有技术合成的一种...封装Ajax请求 —— Promise ?

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -重命名AccordionPanel为AccordionPane (这也是在Asp.net AJAX中使用的名称). +所有的面板默认有两个集合属性(Toolbars和Items). -尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置...

    ajax文档ajax文档

    AJAX 指异步 JavaScript 及 XML(Asynchronous JavaScript And XML)。  国 [使用ajax 构建应用程序] 使用ajax 构建应用程序 内翻译常为“阿贾克斯”和阿贾克斯足球队同音。Web应用的交互如Flickr,Backpack和...

Global site tag (gtag.js) - Google Analytics