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

了解什么时候适合什么时候不适合使用 XML

简介:偶尔使用 Ajax 的开发人员也会注意到 Ajax 中的 x 并意识到它代表 XML。XML 是编程中最常 用的数据格式之一,对于异步应用程序中的服务器响应能够带来切实的好处。在本文中,您将看到服务器 如何在请求响应中发送 XML。

现在如果不使用 XML 就不能进行任何有意义的编程。无论考虑转向 XHTML 的网页设计人员、使用 JavaScript 的 Web 程序员、使用部署描述文件和数据绑定的服务器端程序员,还是研究基于 XML 的数 据库的后端开发人员,都在使用这种可扩展标记语言。因此,XML 被认为是 Ajax 底层的核心技术之一就 不足为奇了。

但是,这种观点反映到 Ajax 应用程序就表现在其核心对象所选的名称 —— XMLHttpRequest,这个 名称不是很好,因为它并没有反映技术上的实际情况。换句话说,多数人之所以认为 XML 是 Ajax 的核 心组成部分,仅仅是因为他们想当然地以为 XMLHttpRequest 对象在任何时候都使用 XML。但实情并非如 此,本文第一部分给出了原因。实际上,您将看到在多数 Ajax 应用程序中 XML 很少出现。

XML 确实有应用在 Ajax 中,而且 XMLHttpRequest 也支持这种用法。也确实没有什么能阻挡您向服 务器发送 XML。在本系列前面的文章中,我们使用普通文本和名/值参数发送数据,但 XML 也是一种可行 的格式。本文将介绍如何来这样做。但最重要的是,我将讨论为何可以使用 XML 作为请求格式,以及为 何在多数情况下不应该使用它。

XML:到底用没用?

对 Ajax 应用程序及它们使用 XML 的情况很容易犯想当然的错误:这种技术的名称(Ajax)及其使用 的核心对象(XMLHttpRequest)都暗示了 XML 的使用,谈到 Ajax 应用程序的时候也经常听到 XML。但 是,这种观点大错特错,如果希望在编写异步应用程序时真正做到胸有成竹,必须知道这种想法是错误的 ,而且最好知道为什么错误。

XMLHttpRequest:糟糕的名称和 HTTP

一项技术可能遇到的最糟的境况之一是它变得太炙手可热以至于无法再改变它的一些基本内容。 XMLHttpRequest 恰恰是这种情形,它是 Ajax 应用程序中使用的基本对象。听起来它似乎是为通过 HTTP 请求发送 XML 或者以某种 XML 格式发出 HTTP 请求而设计的。但不论这个对象的名称听起来像什么,实 际上它要做的只不过是为客户机代码(在网页中通常是 JavaScript)提供一种发送 HTTP 请求的方式。 仅此而已,别无其他。

因此,如果将 XMLHttpRequest 改成某种更准确的名称可能更好一些,比如 HttpRequest,或者简简 单单的 Request。但是,现在成千上万的人在应用程序中使用了 Ajax,而且我们知道需要几年时间(如 果不是十几年的话)大部分用户才会改用 Internet Explorer 7.0 或 Firefox 1.5 这些新版本的浏览器 ,因此这么修改实际上是不可行的。最终我们不得不使用 XMLHttpRequest,这就要求开发人员要知道其 名不符实的这一事实。

在一定程度上讲,对于不支持 XMLHttpRequest 的浏览器(特别是在 Windows 上)的最佳回溯方法之 一就是使用 Microsoft IFRAME 对象。听起来可不像是 XML、HTTP 或请求,是不是?当然,所有这些都 可能涉及到,但是这正清楚地说明了一点 —— XMLHttpRequest 对象更多的是关于在不重新加载页面的 情况发出请求,而不会太多地涉及 XML 甚至 HTTP。

请求是 HTTP 而非 XML

另一种常见的错误是认为 XML 在幕后使用 —— 坦白地说,我也曾这么认为!但是,持这种观点表明 您对这种技术还不甚了解。当用户打开浏览器从服务器上请求网页时,会输入 http://www.google.com 或者 http://www.headfirstlabs.com 这样的东西。即便不输入 http://,浏览器也会在地址栏的这部分 加上。第一部分,即 http://,是关于如何通信的很直观的线索:通过超文本传输协议 HTTP。在网页中 编写代码与服务器通信时,无论使用 Ajax 还是普通的表单 POST,甚至超链接,打交道的都是 HTTP。

既然浏览器和服务器之间的所有 Web 通信都通过 HTTP 进行,认为 XML 是 XMLHttpRequest 幕后所 用的某种传输技术的想法就毫无道理了。当然在 HTTP 请求中可以发送 XML,但是 HTTP 是一个精确定义 的协议,短时间内不可能消失。除了在请求中明确使用 XML,或者服务器用 XML 发送响应之外, XMLHttpRequest 对象使用的只是普普通通的 HTTP。因此,当再有人对您说 “哦,称为 XMLHttpRequest 是因为在幕后使用 XML” 的时候,您最好一笑了之,并耐心地解释什么是 HTTP,告诉他们虽然 XML 可 以通过 HTTP 发送,但 XML 是一种数据格式而不是传输协议。通过这样的讨论,加深对它的理解。

时间: 2025-01-19 02:58:15

掌握Ajax,第7部分: 在请求和响应中使用XML的相关文章

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

Ajax 客户机/服务器通信可以很巧妙 简介:在 本系列的上一篇文章 中,您看到了 Ajax 应用程序如何以 XML 格式化发往服务器的请求. 还了解了为什么这在大多数情况下并不是一个好主意.这篇文章主要探讨在大多数情况下确实是 好主意 的一种做法:向客户机返回 XML 响应. 我其实并不喜欢写那种主要告诉您什么不应该 做的文章.很多时候,那都会是一篇非常愚蠢的文章. 我要在前半篇文章中解释某些东西,然后在后半篇文章中说明使用您刚刚才学会的那种技术是一个多么糟 糕的主意.在很大程度上,上一期文章

java web请求和响应中出现中文乱码问题的解析_java

说明:在计算机中保存的一切文本信息是以一定的编码表(0,1,0,1)来保存我们所认识的字符(汉字或英文字符),由字符到计算机存储的二进制过程是编码,由读取二进制到文本的过程称为解码.而字符编码有多种不同的编码表,所以,如果编码格式和解码格式不是同一个码表就会出现乱码.想要避免出现乱码,需要使保存和读取时使用相同的码表. 在java web编程中经常会出现乱码,现在详细讲解一下如何进行设置,避免乱码 1 网页编码 在编写网页的时候,需要指定网页的编码格式,使用<meta http-equiv=&quo

Ajax 中的高级请求和响应

ajax|高级|请求|响应 对于很多 Web 开发人员来说,只需要生成简单的请求并接收简单的响应即可:但是对于希望掌握 Ajax 的开发人员来说,必须要全面理解 HTTP 状态代码.就绪状态和 XMLHttpRequest 对象.在本文中,Brett McLaughlin 将向您介绍各种状态代码,并展示浏览器如何对其进行处理,本文还给出了在 Ajax 中使用的比较少见的 HTTP 请求. 在本系列的 上篇文章 中,我们将详细介绍 XMLHttpRequest 对象,它是 Ajax 应用程序的中心

[四天学会ajax] 学习Ajax教程第三天,Ajax 中的高级请求和响应

ajax|高级|教程|请求|响应 对于很多 Web 开发人员来说,只需要生成简单的请求并接收简单的响应即可:但是对于希望掌握 Ajax 的开发人员来说,必须要全面理解 HTTP 状态代码.就绪状态和 XMLHttpRequest 对象.在本文中,Brett McLaughlin 将向您介绍各种状态代码,并展示浏览器如何对其进行处理,本文还给出了在 Ajax 中使用的比较少见的 HTTP 请求. 在本系列的 上篇文章 中,我们将详细介绍 XMLHttpRequest 对象,它是 Ajax 应用程序

异步-ajax发送了多少次请求

问题描述 ajax发送了多少次请求 百度地图中应用了ajax的异步刷新,那么当我不断加载地图,ajax一共发送了多少次请求? 解决方案 用chrome.ie等自带的调试工具,或者用fiddler看下.不过可以告诉你的是,发送了很多很多次. 解决方案二: 如果一次能全部接收到所有数据的话,就是一次,如果需要定位出好多个点的话,应该是好多次 解决方案三: 如果参数没有变化的话,是不是会使用缓存呢?还有, 百度地图接口调用有没有次数限制呢? 解决方案四: 你的位置变化可能作为参数通过ajax对象传到服

掌握Ajax,第3部分: Ajax中的高级请求和响应

全面理解 HTTP 的状态代码.就绪状态和 XMLHttpRequest 对象 简介:对于很多 Web 开发人员来说,只需要生成简单的请求并接收简单的响应即可:但是对于希望掌 握 Ajax 的开发人员来说,必须要全面理解 HTTP 状态代码.就绪状态和 XMLHttpRequest 对象.在本文 中,Brett McLaughlin 将向您介绍各种状态代码,并展示浏览器如何对其进行处理,本文还给出了在 Ajax 中使用的比较少见的 HTTP 请求. 在本系列的 上篇文章 中,我们将详细介绍 XM

.net 开发的网页,使用ajax.dll 来做ajax,在微信浏览器里不响应请求啊

问题描述 .net 开发的网页,使用ajax.dll 来做ajax,在微信浏览器里不响应请求啊 .net 开发的网页,们使用ajax.dll 来做ajax,在其他浏览器都好用只是在微信浏览器里不响应请求啊,是微信浏览器不支持ajax,还是ajax.dll不行,或者有什么方法可以替代呢? 解决方案 .net2003 使用 Ajax.dll 小结.net2003中ajax.dll用法 解决方案二: http://ask.csdn.net/questions/186667

ajax-Asp.Net中Ajax如何通过HTTPS POST请求数据呢?

问题描述 Asp.Net中Ajax如何通过HTTPS POST请求数据呢? 如题,用HTTP是可以请求成功,但是用HTTPS去请求总是400错误,这是为什么呢? 解决方案 我知道怎么不行了,可能是不在同一个域名内,还有一个是因为使用oc的第三方网络库有问题,我后来换成了Alamofire这个网络库,就可以了.之前使用的是OC下得AFNetworking 解决方案二: asp.net ajax post方式Asp.Net+JQuery.Ajax之$.postasp.net AJAX POST抓取

ajax中的高级请求和响应

对于很多 Web 开发人员来说,只需要生成简单的请求并接收简单的响应即可:但是对于希望掌握 Ajax 的开发人员来说,必须要全面理解 HTTP 状态代码.就绪状态和 XMLHttpRequest 对象.在本文中,Brett McLaughlin 将向您介绍各种状态代码,并展示浏览器如何对其进行处理,本文还给出了在 Ajax 中使用的比较少见的 HTTP 请求: HTTP 就绪状态 HTTP 状态代码 可以生成的请求类型 深入了解 HTTP 就绪状态 0:请求未初始化(还没有调用 open()).