`

XMLHttpRequest

阅读更多
XMLHttpRequest是Ajax技术体系中最为核心的技术。缺少了它,Ajax的其余技术就无法成为一个有机的整体,将会土崩瓦解。
1999年上半年,M$在IE 5.0版中首次支持这种技术,他们是通过一个名为XMLHTTP的ActiveX对象来支持这种技术的。XMLHTTP对象使得页面中的脚本具有了在不刷新页面的情况下直接与服务器通信的能力。在此之前,能够做到这件事的唯一技术是通过IFrame,然而这超越了IFrame最初设计的目标,是一种存在潜在危险的hack做法。既然已经有很多不守规矩的开发者做出了越轨的行为,并且事实证明这样的开发方式确实非常有价值,也不会对系统安全造成什么破坏。于是M$就从善如流地发明了XMLHTTP对象,专门用来为浏览器中的脚本(在IE中就是JScript和VBScript)提供这样的服务器通信能力。
XMLHTTP对象大受欢迎,到了2000年它几乎已经成为了事实上的标准。Mozilla在这一年实现了具有相同接口的原生对象,称作XMLHttpRequest对象。后来Opera、Safari等浏览器也都相继实现了XMLHttpRequest对象。现在XMLHttpRequest是这个技术的正式名称。

Ajax所依赖的技术之中唯一一个尚未正式标准化的部分就是XMLHttpRequest,不过现在W3C已经将其列入了工作草案,应该很快就会成为正式的标准。
目前在IE 5.0、IE 6.0中创建XMLHttpRequest对象的语法如下:

var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
而在非IE浏览器中创建XMLHttpRequest对象的语法如下:
var xmlhttp = new XMLHttpRequest();
M$在IE 7.0中将能够同时支持ActiveX对象和原生的XMLHttpRequest对象的创建方法,这是一个从善如流之举。因此,当IE 7.0普及之后,创建XMLHttpRequest对象将可以使用完全相同的语法。
XMLHttpRequest与服务器通信有两种方式:同步方式和异步方式。同步方式的调用非常简单,但是仅仅适用于数据量非常少的场合。如果数据量很大,会造成用户界面很长一段时间的停顿,这当然会损害Web应用的可用性。为了不影响可用性,Ajax应用中一般都使用异步方式来与服务器通信。用来设置同步和异步方式的是XMLHttpRequest对象的open方法的第3个参数,这个参数为true代表异步,为false代表同步。例如:

xmlhttp.open("GET", "http://www.blogjava.net/dlee/Rss.aspx", true);
如果是使用异步方式来进行通信,还需要设置一个回调函数,当数据返回时系统会调用这个回调函数。通过为XMLHttpRequest对象的onreadystatechange属性赋值来设置一个回调函数:
xmlhttp.onreadystatechange=function() {...};
此外,为了很好地支持中文和国际化,字符集一般都使用UTF-8,这可以通过调用XMLHttpRequest对象上的setRequestHeader方法来设置:

xmlhttp.setRequestHeader("Content-Type","text/xml;charset=utf-8");
如果服务器返回的是XML格式的数据,并且正确设置了HTTP头信息中的Content-Type,例如在Java中是这样设置的:

resp.setContentType("text/xml;charset=utf-8");
那么客户端的回调函数可以通过XMLHttpRequest对象的responseXML属性中获得XML DOM树形式的返回数据。
XMLHttpRequest其实是用语不当,它其实可以使用任何纯文本格式与服务器通信,而不限于XML格式。注意上面客户和服务器两端的Content-Type设置需要对应起来,如果它们都改成text/plain,那就是使用纯文本来进行通信,在回调函数中就需要访问XMLHttpRequest对象的responseText属性来获得纯文本形式的返回数据。

附:推荐的XMLHttpRequest相关书籍。

《Ajax实战》(Ajax in Action中文版),Dave Crane、Eric Pascarello、Darren James著。
《Ajax修炼之道》(Pragmatic Ajax中文版),Justin Gehtland、Ben Galbraith、Dion Almaer著。
《Ajax基础教程》(Foundations of Ajax中文版),Ryan Asleson、Nathaniel T. Schutta著。


当XMLHttpRequest对象把一个HTTP请求发送到服务器时将经历若干种状态:一直等待直到请求被处理;然后,它才接收一个响应。这样以来,脚本才正确响应各种状态-XMLHttpRequest对象暴露一个描述对象的当前状态的readyState属性:
0   描述一种"未初始化"状态;此时,已经创建一个XMLHttpRequest对象,但是还没有初始化。
1   描述一种"发送"状态;此时,代码已经调用了XMLHttpRequest open()方法并且XMLHttpRequest已经准备好把一个请求发送到服务器。
2   描述一种"发送"状态;此时,已经通过send()方法把一个请求发送到服务器端,但是还没有收到一个响应。
3   描述一种"正在接收"状态;此时,已经接收到HTTP响应头部信息,但是消息体部分还没有完全接收结束。
4   描述一种"已加载"状态;此时,响应已经被完全接收。

System.xml.xmlDocument
它的作用是解析xml文档,将其转换为对象,使你可以在程序中对其操作
XmlDocument 成员请参见: http://msdn2.microsoft.com/zh-cn/library/system.xml.xmldocument_members(VS.80).aspx



分享到:
评论

相关推荐

    window.XMLHttpRequest详解(AJAX工作原理)1

    ### window.XMLHttpRequest详解与AJAX工作原理 #### 引言 在现代Web开发中,**AJAX**(Asynchronous JavaScript and XML)技术是一项至关重要的技术,它允许网页在不重新加载整个页面的情况下从服务器获取数据并...

    XMLHTTPREQUEST

    ### XMLHTTPRequest对象详解 在现代Web开发中,客户端与服务器之间的数据交换是非常常见的需求之一。为了实现这种异步数据通信,JavaScript提供了一种强大的工具——`XMLHTTPRequest`对象。通过这个对象,开发者...

    Ajax深度剖析,XMLHttpRequest对象大揭秘

    这一技术的核心是XMLHttpRequest(XHR)对象,它是JavaScript原生提供的一种用于在后台与服务器通信的API。在这篇深度剖析中,我们将揭开XMLHttpRequest对象的神秘面纱,探讨其工作原理、常用方法和实际应用。 ...

    (完整数据)全国各地级市分类异质性数据2024年

    ## 数据指标说明 地域范围:298个地级市(其中包括4个直辖市) 更新时间:2024年 数据来源:文件里面有说明 指数包括: (1)南北方城市 (2)东中西城市 (3)七大地理区、八大综合经济区 (4)城市群,长三角珠三角京津冀等 (5)长江流域沿岸、黄河流域沿岸 (6)35个大中城市、70个大中城市 (7)沿海城市: (8)胡焕庸线 (9)环境重点保护城市 参考文献: 赵涛,张智,梁上坤.数字经济、创业活跃度与高质量发展——来自中国城市的经验证据[J].管理世界,2020,36(10):65-76. 胡求光,周宇飞.开发区产业集聚的环境效应:加剧污染还是促进治理?[J].中国人口·资源与环境,2020,30(10):64-72. 蒋仁爱,杨圣豪,温军.高铁开通与经济高质量发展——机制及效果[J].南开经济研究,2023(07):70-89.

    GPU RDMA上游支持进展及动态内存缓冲区机制

    内容概要:本文详细介绍了 GPU 上游 RDMA 支持的最新进展,重点讨论了使用 dma-buf 作为共享内存机制的关键技术细节和设计变更。文章还展示了目前的工作状态,未来的发展方向以及软件生态系统的启用。核心内容包括动态内存缓冲区机制的实现方法及其与 GPU 和 NIC 驱动程序的交互方式。 适合人群:从事高性能计算和分布式系统研究的技术人员,尤其是对 GPU 和 RDMA 技术感兴趣的开发者。 使用场景及目标:帮助研究人员和开发者了解并实施 GPU-RDMA 解决方案,提升系统性能。具体应用场景包括数据中心内的高效数据传输和大规模并行计算任务的优化。 其他说明:文中提供了详细的代码审查和技术设计的背景,有助于深入理解相关技术的内部运作机制。此外,文章还提到了当前的一些挑战和未来的改进方向,为后续的研究提供指导。

    深入理解Java回调函数及其应用实例

    内容概要:本文详细介绍了回调函数的概念、分类和特点。通过具体实例展示了同步和异步回调函数在Java程序中的应用场景,如事件处理、多线程操作和第三方库的集成。同时阐述了如何利用接口和Java 8的Lambda表达式实现高效的回调机制。 适合人群:具有初级及以上Java编程经验的开发者,尤其是希望深入了解回调函数工作机制的人群。 使用场景及目标:帮助读者掌握同步和异步回调函数的区别及应用场景,提高程序的响应速度和效率。在日常开发中能够灵活运用回调函数解决实际问题。 其他说明:回调函数广泛应用于多种开发框架和技术中,熟练掌握回调函数有助于提升编程技巧和软件架构能力。

    基于java的理发店会员管理系统设计与实现e.docx

    基于java的理发店会员管理系统设计与实现e.docx

    C 语言应用级扩展库 是在工作、学习过程中积累或研发的应用模块集合 编码遵循 ANSI C 规范,易于扩展和学习 常用模块 状态机FsmTiny 按键WtButton 灯控WtLamp.zip

    C 语言应用级扩展库。是在工作、学习过程中积累或研发的应用模块集合。编码遵循 ANSI C 规范,易于扩展和学习。 常用模块 状态机FsmTiny 按键WtButton 灯控WtLamp摘要纯 C 语言应用级扩展库,每个模块都与硬件无关。是在工作、学习过程中积累或研发的应用模块集合,每个模块有一个独立的项目文件,编码遵循标准 ANSI C,命名规范,易于扩展和学习。 常用模块状态机FsmTiny按键WtButton灯控WtLamp十六进制转换Hex开发环境Microsoft Visual Studio 社区 2022(64 位)Microsoft Visual C++ 2022(纯 C 模式)获取git clone https://github.com/feallee/WtLibrary.git 注意事项部分开发环境需要预先初始化动态内存池作为使用动态内存的前置条件(如 Keil C51)。在其它环境编译、调试只需指定模块相应的 .c 和 .h 文件即可。模块与硬件无关,需编写硬件驱动与模块关联(如按键、灯控等)。问题和建议如果有什么问题或者建议

    飞龙易语言源码集.zip

    飞龙易语言源码集飞龙易语言源码集以前写过的一些贴吧工具的源码,已经失效。只是给对贴吧工具感兴趣的人研究,于2013.1停止维护。

    基于Python Django停车场预约停车计费系统设计毕业源码案例设计资料齐全+详细文档.zip

    【资源说明】 基于Python Django停车场预约停车计费系统设计毕业源码案例设计资料齐全+详细文档.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    基于java的高校学生实习管理系统的开题报告.docx

    基于java的高校学生实习管理系统的开题报告.docx

    Emlog酷乐新春特别版coolappy模板2.2+emlogV6.1.1全套打包

    更新说明: 1.修改首页翻页样式,更新为蓝色样式的翻页按钮 2.修改推荐区原始的一体样式,更改为方块化样式 3.优化底部友情链接,从原始的底部上移到首页中部模块中,从此友情链接区域也是首页中部的一份子 4.修改底部样式,背景颜色修改为亮黑色,字体从灰白修改为白色 5.修改底部排版,右侧加入本站自定义logo1,从此底部不再单调 6.去除百度收录检测(实在是不准确,只好去除...) 7.修复内容页标签存在但是不显示或者隔段时间自动消失 8.修改内容页中免责声明区域,简单大方 9.内容页增加点赞按钮,增加活跃性 10.修复作者信息区域文章数量等需要手动填写,改为自动获取 11.增加作者文章列表 12.修改内容分类区域描述字数为100个字符 13.优化模板整体SEO 14.去除文章页面上一篇下一篇翻页按钮 15.优化左侧广告图可在模板设置中进行修改 模板为emlog6.1.1开发

    遗传算法原理及其在优化领域的应用详解

    内容概要:本文详细介绍了遗传算法的基本原理及其应用。遗传算法模拟自然界的生物进化过程,通过编码、选择、交叉、变异等操作对问题进行求解。首先解释了遗传算法的工作流程,然后探讨了它的三大应用领域——函数优化、组合优化以及机器学习中的参数优化,并指出算法的优缺点。 适合人群:对智能优化算法感兴趣的科研工作者、软件开发者及学生。 使用场景及目标:适用于解决各种类型的问题,特别是在传统数学建模方法难以奏效的情形下,遗传算法提供了强大的工具支持。通过理解和运用遗传算法,可以有效地求解诸如最优化、路径规划等问题,提升模型性能。 阅读建议:读者应当重点关注遗传算法的工作流程,深入理解各个步骤的操作细节及其背后的生物学意义,结合实际案例加深理解并尝试应用到自己的项目中去。

    嵌入式开发基础知识与实践指南

    内容概要:本文详细介绍了嵌入式开发领域的基础知识、硬件和软件要求、开发工具和环境搭建方法,以及多个实践项目。文章首先解释了嵌入式系统的特点和应用范围,然后依次介绍了常用的硬件平台(如 Arduino、STM32、ESP32、Raspberry Pi)、编程语言(C、C++、Python)、操作系统(裸机开发、RTOS、嵌入式 Linux),接着讲解了开发环境的搭建步骤,最后提供了一些具体的实践项目,帮助读者更好地理解和掌握嵌入式开发技术。 适合人群:对嵌入式开发感兴趣的初学者和有一定基础的研发人员。 使用场景及目标:通过实际动手项目,逐步深入理解和掌握嵌入式开发的基本概念和技术细节,能够独立完成简单的嵌入式系统开发。 阅读建议:建议按部就班地学习理论部分,并结合实践项目进行动手练习,逐步提升自己的嵌入式开发能力。可以在学习过程中参阅相关书籍和官方文档,加入社区讨论以解决具体问题。

    产品经理原型设计用到的组件样式集合有哪些?

    产品经理原型设计用到的组件样式集合有哪些?

    Android开发入门教程:从基础知识到实战项目

    内容概要:本文详细介绍了Android开发的整个流程,从前期准备工作到具体的技术点,再到实践项目的参与。具体内容包括:了解Android的基础知识,安装开发工具(如Android Studio、JDK、SDK),学习编程语言(Java和Kotlin),掌握Android的UI体系(布局管理和常用控件),深入了解Android四大组件(Activity、Service、BroadcastReceiver、ContentProvider),学习事件处理机制、数据存储与访问(文件存储、SharedPreferences、SQLite数据库)、网络编程(HTTP协议、XML与JSON解析、文件上传与下载)。此外,还介绍了性能优化、插件化、组件化、热修复以及跨平台UI框架Flutter等进阶内容。 适合人群:对Android开发感兴趣的初学者和有一定编程基础的开发者。 使用场景及目标:帮助读者全面了解Android开发的基础知识和技术点,为从事Android应用开发打下坚实的基础。通过学习和实践,能够独立完成基本的Android应用开发。 阅读建议:本教程覆盖了Android开发的各个方面,建议按章节逐步学习,理论联系实际,多动手练习并参与实际项目,以便更好地理解和掌握各个知识点。

    Linux平台,基于C语言的简易爬虫.zip

    Linux平台,基于C语言的简易爬虫蜘蛛

    基于 Selenium 的知乎关键词爬虫详细文档+资料齐全.zip

    【资源说明】 基于 Selenium 的知乎关键词爬虫详细文档+资料齐全.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    线上租房平台 微信小程序+SpringBoot毕业设计 源码+数据库+论文+启动教程.zip

    线上租房平台 微信小程序+SpringBoot毕业设计 源码+数据库+论文+启动教程 项目启动教程:https://www.bilibili.com/video/BV1oiBpYcEBp

Global site tag (gtag.js) - Google Analytics